@promptbook/deepseek 0.89.0-1 → 0.89.0-11

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 (52) hide show
  1. package/README.md +3 -1
  2. package/esm/index.es.js +464 -38
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/core.index.d.ts +16 -4
  5. package/esm/typings/src/_packages/remote-client.index.d.ts +6 -8
  6. package/esm/typings/src/_packages/remote-server.index.d.ts +6 -6
  7. package/esm/typings/src/_packages/types.index.d.ts +18 -20
  8. package/esm/typings/src/cli/cli-commands/login.d.ts +15 -0
  9. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +7 -0
  10. package/esm/typings/src/cli/common/$provideLlmToolsForCli.d.ts +15 -0
  11. package/esm/typings/src/config.d.ts +15 -8
  12. package/esm/typings/src/errors/0-index.d.ts +6 -0
  13. package/esm/typings/src/errors/AuthenticationError.d.ts +9 -0
  14. package/esm/typings/src/errors/PromptbookFetchError.d.ts +9 -0
  15. package/esm/typings/src/execution/PipelineExecutorResult.d.ts +2 -2
  16. package/esm/typings/src/execution/PromptResult.d.ts +2 -2
  17. package/esm/typings/src/execution/{PromptResultUsage.d.ts → Usage.d.ts} +5 -5
  18. package/esm/typings/src/execution/utils/addUsage.d.ts +2 -2
  19. package/esm/typings/src/execution/utils/computeUsageCounts.d.ts +3 -3
  20. package/esm/typings/src/execution/utils/usage-constants.d.ts +77 -60
  21. package/esm/typings/src/execution/utils/usageToHuman.d.ts +5 -5
  22. package/esm/typings/src/execution/utils/usageToWorktime.d.ts +5 -5
  23. package/esm/typings/src/llm-providers/_common/register/$provideEnvFilename.d.ts +12 -0
  24. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +2 -8
  25. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +2 -0
  26. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizzardOrCli.d.ts +36 -1
  27. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsFromEnv.d.ts +1 -0
  28. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/LlmExecutionToolsWithTotalUsage.d.ts +3 -3
  29. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/limitTotalUsage.d.ts +2 -2
  30. package/esm/typings/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionToolsOptions.d.ts +1 -1
  31. package/esm/typings/src/llm-providers/anthropic-claude/computeAnthropicClaudeUsage.d.ts +2 -2
  32. package/esm/typings/src/llm-providers/anthropic-claude/register-configuration.d.ts +1 -1
  33. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +0 -9
  34. package/esm/typings/src/llm-providers/openai/computeOpenAiUsage.d.ts +2 -2
  35. package/esm/typings/src/pipeline/PipelineJson/PreparationJson.d.ts +2 -2
  36. package/esm/typings/src/remote-server/RemoteServer.d.ts +23 -0
  37. package/esm/typings/src/remote-server/socket-types/_subtypes/{PromptbookServer_Identification.d.ts → Identification.d.ts} +3 -3
  38. package/esm/typings/src/remote-server/socket-types/listModels/PromptbookServer_ListModels_Request.d.ts +2 -2
  39. package/esm/typings/src/remote-server/socket-types/prepare/PromptbookServer_PreparePipeline_Request.d.ts +2 -2
  40. package/esm/typings/src/remote-server/socket-types/prompt/PromptbookServer_Prompt_Request.d.ts +2 -2
  41. package/esm/typings/src/remote-server/startRemoteServer.d.ts +2 -2
  42. package/esm/typings/src/remote-server/types/RemoteClientOptions.d.ts +4 -12
  43. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +73 -3
  44. package/esm/typings/src/scrapers/_common/utils/{scraperFetch.d.ts → promptbookFetch.d.ts} +2 -2
  45. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +37 -0
  46. package/esm/typings/src/types/typeAliases.d.ts +6 -0
  47. package/esm/typings/src/utils/organization/TODO_narrow.d.ts +6 -0
  48. package/package.json +2 -2
  49. package/umd/index.umd.js +464 -38
  50. package/umd/index.umd.js.map +1 -1
  51. package/esm/typings/src/playground/BrjappConnector.d.ts +0 -64
  52. package/esm/typings/src/playground/brjapp-api-schema.d.ts +0 -12879
package/README.md CHANGED
@@ -199,7 +199,7 @@ Each part of the book defines one of 3 circles:
199
199
 
200
200
  ### **What:** Workflows, Tasks and Parameters
201
201
 
202
- What work needs to be done. Each book defines a workflow, which is one or more tasks. Each workflow has a fixed input and output. For example, you have a book that generates an article from a topic. Once it generates an article about AI, once about marketing, once about cooking. The workflow (= your AI program) is the same, only the input and output change.
202
+ What work needs to be done. Each book defines a [workflow *(scenario or pipeline)*](https://github.com/webgptorg/promptbook/discussions/88), which is one or more tasks. Each workflow has a fixed input and output. For example, you have a book that generates an article from a topic. Once it generates an article about AI, once about marketing, once about cooking. The workflow (= your AI program) is the same, only the input and output change.
203
203
 
204
204
  **Related commands:**
205
205
 
@@ -309,6 +309,8 @@ The following glossary is used to clarify certain concepts:
309
309
 
310
310
 
311
311
 
312
+
313
+
312
314
  _Note: This section is not complete dictionary, more list of general AI / LLM terms that has connection with Promptbook_
313
315
 
314
316
 
package/esm/index.es.js CHANGED
@@ -16,7 +16,7 @@ const BOOK_LANGUAGE_VERSION = '1.0.0';
16
16
  * @generated
17
17
  * @see https://github.com/webgptorg/promptbook
18
18
  */
19
- const PROMPTBOOK_ENGINE_VERSION = '0.89.0-1';
19
+ const PROMPTBOOK_ENGINE_VERSION = '0.89.0-11';
20
20
  /**
21
21
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
22
22
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -74,6 +74,400 @@ class PipelineExecutionError extends Error {
74
74
  * TODO: !!!!!! Add id to all errors
75
75
  */
76
76
 
77
+ /**
78
+ * Counts number of characters in the text
79
+ *
80
+ * @public exported from `@promptbook/utils`
81
+ */
82
+ function countCharacters(text) {
83
+ // Remove null characters
84
+ text = text.replace(/\0/g, '');
85
+ // Replace emojis (and also ZWJ sequence) with hyphens
86
+ text = text.replace(/(\p{Extended_Pictographic})\p{Modifier_Symbol}/gu, '$1');
87
+ text = text.replace(/(\p{Extended_Pictographic})[\u{FE00}-\u{FE0F}]/gu, '$1');
88
+ text = text.replace(/\p{Extended_Pictographic}(\u{200D}\p{Extended_Pictographic})*/gu, '-');
89
+ return text.length;
90
+ }
91
+ /**
92
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
93
+ */
94
+
95
+ /**
96
+ * Number of characters per standard line with 11pt Arial font size.
97
+ *
98
+ * @public exported from `@promptbook/utils`
99
+ */
100
+ const CHARACTERS_PER_STANDARD_LINE = 63;
101
+ /**
102
+ * Number of lines per standard A4 page with 11pt Arial font size and standard margins and spacing.
103
+ *
104
+ * @public exported from `@promptbook/utils`
105
+ */
106
+ const LINES_PER_STANDARD_PAGE = 44;
107
+ /**
108
+ * TODO: [🧠] Should be this `constants.ts` or `config.ts`?
109
+ * Note: [💞] Ignore a discrepancy between file name and entity name
110
+ */
111
+
112
+ /**
113
+ * Counts number of lines in the text
114
+ *
115
+ * Note: This does not check only for the presence of newlines, but also for the length of the standard line.
116
+ *
117
+ * @public exported from `@promptbook/utils`
118
+ */
119
+ function countLines(text) {
120
+ text = text.replace('\r\n', '\n');
121
+ text = text.replace('\r', '\n');
122
+ const lines = text.split('\n');
123
+ return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
124
+ }
125
+ /**
126
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
127
+ */
128
+
129
+ /**
130
+ * Counts number of pages in the text
131
+ *
132
+ * Note: This does not check only for the count of newlines, but also for the length of the standard line and length of the standard page.
133
+ *
134
+ * @public exported from `@promptbook/utils`
135
+ */
136
+ function countPages(text) {
137
+ return Math.ceil(countLines(text) / LINES_PER_STANDARD_PAGE);
138
+ }
139
+ /**
140
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
141
+ */
142
+
143
+ /**
144
+ * Counts number of paragraphs in the text
145
+ *
146
+ * @public exported from `@promptbook/utils`
147
+ */
148
+ function countParagraphs(text) {
149
+ return text.split(/\n\s*\n/).filter((paragraph) => paragraph.trim() !== '').length;
150
+ }
151
+ /**
152
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
153
+ */
154
+
155
+ /**
156
+ * Split text into sentences
157
+ *
158
+ * @public exported from `@promptbook/utils`
159
+ */
160
+ function splitIntoSentences(text) {
161
+ return text.split(/[.!?]+/).filter((sentence) => sentence.trim() !== '');
162
+ }
163
+ /**
164
+ * Counts number of sentences in the text
165
+ *
166
+ * @public exported from `@promptbook/utils`
167
+ */
168
+ function countSentences(text) {
169
+ return splitIntoSentences(text).length;
170
+ }
171
+ /**
172
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
173
+ */
174
+
175
+ const defaultDiacriticsRemovalMap = [
176
+ {
177
+ base: 'A',
178
+ letters: '\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F',
179
+ },
180
+ { base: 'AA', letters: '\uA732' },
181
+ { base: 'AE', letters: '\u00C6\u01FC\u01E2' },
182
+ { base: 'AO', letters: '\uA734' },
183
+ { base: 'AU', letters: '\uA736' },
184
+ { base: 'AV', letters: '\uA738\uA73A' },
185
+ { base: 'AY', letters: '\uA73C' },
186
+ {
187
+ base: 'B',
188
+ letters: '\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181',
189
+ },
190
+ {
191
+ base: 'C',
192
+ letters: '\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E',
193
+ },
194
+ {
195
+ base: 'D',
196
+ letters: '\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779\u00D0',
197
+ },
198
+ { base: 'DZ', letters: '\u01F1\u01C4' },
199
+ { base: 'Dz', letters: '\u01F2\u01C5' },
200
+ {
201
+ base: 'E',
202
+ letters: '\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E',
203
+ },
204
+ { base: 'F', letters: '\u0046\u24BB\uFF26\u1E1E\u0191\uA77B' },
205
+ {
206
+ base: 'G',
207
+ letters: '\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E',
208
+ },
209
+ {
210
+ base: 'H',
211
+ letters: '\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D',
212
+ },
213
+ {
214
+ base: 'I',
215
+ letters: '\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197',
216
+ },
217
+ { base: 'J', letters: '\u004A\u24BF\uFF2A\u0134\u0248' },
218
+ {
219
+ base: 'K',
220
+ letters: '\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2',
221
+ },
222
+ {
223
+ base: 'L',
224
+ letters: '\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780',
225
+ },
226
+ { base: 'LJ', letters: '\u01C7' },
227
+ { base: 'Lj', letters: '\u01C8' },
228
+ { base: 'M', letters: '\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C' },
229
+ {
230
+ base: 'N',
231
+ letters: '\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4',
232
+ },
233
+ { base: 'NJ', letters: '\u01CA' },
234
+ { base: 'Nj', letters: '\u01CB' },
235
+ {
236
+ base: 'O',
237
+ letters: '\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C',
238
+ },
239
+ { base: 'OI', letters: '\u01A2' },
240
+ { base: 'OO', letters: '\uA74E' },
241
+ { base: 'OU', letters: '\u0222' },
242
+ { base: 'OE', letters: '\u008C\u0152' },
243
+ { base: 'oe', letters: '\u009C\u0153' },
244
+ {
245
+ base: 'P',
246
+ letters: '\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754',
247
+ },
248
+ { base: 'Q', letters: '\u0051\u24C6\uFF31\uA756\uA758\u024A' },
249
+ {
250
+ base: 'R',
251
+ letters: '\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782',
252
+ },
253
+ {
254
+ base: 'S',
255
+ letters: '\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784',
256
+ },
257
+ {
258
+ base: 'T',
259
+ letters: '\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786',
260
+ },
261
+ { base: 'TZ', letters: '\uA728' },
262
+ {
263
+ base: 'U',
264
+ 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',
265
+ },
266
+ { base: 'V', letters: '\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245' },
267
+ { base: 'VY', letters: '\uA760' },
268
+ {
269
+ base: 'W',
270
+ letters: '\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72',
271
+ },
272
+ { base: 'X', letters: '\u0058\u24CD\uFF38\u1E8A\u1E8C' },
273
+ {
274
+ base: 'Y',
275
+ letters: '\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE',
276
+ },
277
+ {
278
+ base: 'Z',
279
+ letters: '\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762',
280
+ },
281
+ {
282
+ base: 'a',
283
+ 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',
284
+ },
285
+ { base: 'aa', letters: '\uA733' },
286
+ { base: 'ae', letters: '\u00E6\u01FD\u01E3' },
287
+ { base: 'ao', letters: '\uA735' },
288
+ { base: 'au', letters: '\uA737' },
289
+ { base: 'av', letters: '\uA739\uA73B' },
290
+ { base: 'ay', letters: '\uA73D' },
291
+ {
292
+ base: 'b',
293
+ letters: '\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253',
294
+ },
295
+ {
296
+ base: 'c',
297
+ letters: '\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184',
298
+ },
299
+ {
300
+ base: 'd',
301
+ letters: '\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A',
302
+ },
303
+ { base: 'dz', letters: '\u01F3\u01C6' },
304
+ {
305
+ base: 'e',
306
+ 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',
307
+ },
308
+ { base: 'f', letters: '\u0066\u24D5\uFF46\u1E1F\u0192\uA77C' },
309
+ {
310
+ base: 'g',
311
+ letters: '\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F',
312
+ },
313
+ {
314
+ base: 'h',
315
+ letters: '\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265',
316
+ },
317
+ { base: 'hv', letters: '\u0195' },
318
+ {
319
+ base: 'i',
320
+ letters: '\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131',
321
+ },
322
+ { base: 'j', letters: '\u006A\u24D9\uFF4A\u0135\u01F0\u0249' },
323
+ {
324
+ base: 'k',
325
+ letters: '\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3',
326
+ },
327
+ {
328
+ base: 'l',
329
+ letters: '\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747',
330
+ },
331
+ { base: 'lj', letters: '\u01C9' },
332
+ { base: 'm', letters: '\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F' },
333
+ {
334
+ base: 'n',
335
+ letters: '\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5',
336
+ },
337
+ { base: 'nj', letters: '\u01CC' },
338
+ {
339
+ base: 'o',
340
+ 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',
341
+ },
342
+ { base: 'oi', letters: '\u01A3' },
343
+ { base: 'ou', letters: '\u0223' },
344
+ { base: 'oo', letters: '\uA74F' },
345
+ {
346
+ base: 'p',
347
+ letters: '\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755',
348
+ },
349
+ { base: 'q', letters: '\u0071\u24E0\uFF51\u024B\uA757\uA759' },
350
+ {
351
+ base: 'r',
352
+ letters: '\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783',
353
+ },
354
+ {
355
+ base: 's',
356
+ letters: '\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B',
357
+ },
358
+ {
359
+ base: 't',
360
+ letters: '\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787',
361
+ },
362
+ { base: 'tz', letters: '\uA729' },
363
+ {
364
+ base: 'u',
365
+ 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',
366
+ },
367
+ { base: 'v', letters: '\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C' },
368
+ { base: 'vy', letters: '\uA761' },
369
+ {
370
+ base: 'w',
371
+ letters: '\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73',
372
+ },
373
+ { base: 'x', letters: '\u0078\u24E7\uFF58\u1E8B\u1E8D' },
374
+ {
375
+ base: 'y',
376
+ letters: '\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF',
377
+ },
378
+ {
379
+ base: 'z',
380
+ letters: '\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763',
381
+ },
382
+ ];
383
+ /**
384
+ * Map of letters from diacritic variant to diacritless variant
385
+ * Contains lowercase and uppercase separatelly
386
+ *
387
+ * > "á" => "a"
388
+ * > "ě" => "e"
389
+ * > "Ă" => "A"
390
+ * > ...
391
+ *
392
+ * @public exported from `@promptbook/utils`
393
+ */
394
+ const DIACRITIC_VARIANTS_LETTERS = {};
395
+ // tslint:disable-next-line: prefer-for-of
396
+ for (let i = 0; i < defaultDiacriticsRemovalMap.length; i++) {
397
+ const letters = defaultDiacriticsRemovalMap[i].letters;
398
+ // tslint:disable-next-line: prefer-for-of
399
+ for (let j = 0; j < letters.length; j++) {
400
+ DIACRITIC_VARIANTS_LETTERS[letters[j]] = defaultDiacriticsRemovalMap[i].base;
401
+ }
402
+ }
403
+ // <- TODO: [🍓] Put to maker function to save execution time if not needed
404
+ /*
405
+ @see https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
406
+ Licensed under the Apache License, Version 2.0 (the "License");
407
+ you may not use this file except in compliance with the License.
408
+ You may obtain a copy of the License at
409
+
410
+ http://www.apache.org/licenses/LICENSE-2.0
411
+
412
+ Unless required by applicable law or agreed to in writing, software
413
+ distributed under the License is distributed on an "AS IS" BASIS,
414
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
415
+ See the License for the specific language governing permissions and
416
+ limitations under the License.
417
+ */
418
+
419
+ /**
420
+ * @@@
421
+ *
422
+ * @param input @@@
423
+ * @returns @@@
424
+ * @public exported from `@promptbook/utils`
425
+ */
426
+ function removeDiacritics(input) {
427
+ /*eslint no-control-regex: "off"*/
428
+ return input.replace(/[^\u0000-\u007E]/g, (a) => {
429
+ return DIACRITIC_VARIANTS_LETTERS[a] || a;
430
+ });
431
+ }
432
+ /**
433
+ * TODO: [Ж] Variant for cyrillic (and in general non-latin) letters
434
+ */
435
+
436
+ /**
437
+ * Counts number of words in the text
438
+ *
439
+ * @public exported from `@promptbook/utils`
440
+ */
441
+ function countWords(text) {
442
+ text = text.replace(/[\p{Extended_Pictographic}]/gu, 'a');
443
+ text = removeDiacritics(text);
444
+ // Add spaces before uppercase letters preceded by lowercase letters (for camelCase)
445
+ text = text.replace(/([a-z])([A-Z])/g, '$1 $2');
446
+ return text.split(/[^a-zа-я0-9]+/i).filter((word) => word.length > 0).length;
447
+ }
448
+ /**
449
+ * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
450
+ */
451
+
452
+ /**
453
+ * Helper of usage compute
454
+ *
455
+ * @param content the content of prompt or response
456
+ * @returns part of UsageCounts
457
+ *
458
+ * @private internal utility of LlmExecutionTools
459
+ */
460
+ function computeUsageCounts(content) {
461
+ return {
462
+ charactersCount: { value: countCharacters(content) },
463
+ wordsCount: { value: countWords(content) },
464
+ sentencesCount: { value: countSentences(content) },
465
+ linesCount: { value: countLines(content) },
466
+ paragraphsCount: { value: countParagraphs(content) },
467
+ pagesCount: { value: countPages(content) },
468
+ };
469
+ }
470
+
77
471
  /**
78
472
  * Freezes the given object and all its nested objects recursively
79
473
  *
@@ -101,30 +495,42 @@ function $deepFreeze(objectValue) {
101
495
  * TODO: [🧠] Is there a way how to meaningfully test this utility
102
496
  */
103
497
 
498
+ /**
499
+ * Represents the uncertain value
500
+ *
501
+ * @public exported from `@promptbook/core`
502
+ */
503
+ const ZERO_VALUE = $deepFreeze({ value: 0 });
504
+ /**
505
+ * Represents the uncertain value
506
+ *
507
+ * @public exported from `@promptbook/core`
508
+ */
509
+ const UNCERTAIN_ZERO_VALUE = $deepFreeze({ value: 0, isUncertain: true });
104
510
  /**
105
511
  * Represents the usage with no resources consumed
106
512
  *
107
513
  * @public exported from `@promptbook/core`
108
514
  */
109
515
  $deepFreeze({
110
- price: { value: 0 },
516
+ price: ZERO_VALUE,
111
517
  input: {
112
- tokensCount: { value: 0 },
113
- charactersCount: { value: 0 },
114
- wordsCount: { value: 0 },
115
- sentencesCount: { value: 0 },
116
- linesCount: { value: 0 },
117
- paragraphsCount: { value: 0 },
118
- pagesCount: { value: 0 },
518
+ tokensCount: ZERO_VALUE,
519
+ charactersCount: ZERO_VALUE,
520
+ wordsCount: ZERO_VALUE,
521
+ sentencesCount: ZERO_VALUE,
522
+ linesCount: ZERO_VALUE,
523
+ paragraphsCount: ZERO_VALUE,
524
+ pagesCount: ZERO_VALUE,
119
525
  },
120
526
  output: {
121
- tokensCount: { value: 0 },
122
- charactersCount: { value: 0 },
123
- wordsCount: { value: 0 },
124
- sentencesCount: { value: 0 },
125
- linesCount: { value: 0 },
126
- paragraphsCount: { value: 0 },
127
- pagesCount: { value: 0 },
527
+ tokensCount: ZERO_VALUE,
528
+ charactersCount: ZERO_VALUE,
529
+ wordsCount: ZERO_VALUE,
530
+ sentencesCount: ZERO_VALUE,
531
+ linesCount: ZERO_VALUE,
532
+ paragraphsCount: ZERO_VALUE,
533
+ pagesCount: ZERO_VALUE,
128
534
  },
129
535
  });
130
536
  /**
@@ -132,31 +538,45 @@ $deepFreeze({
132
538
  *
133
539
  * @public exported from `@promptbook/core`
134
540
  */
135
- const UNCERTAIN_USAGE = $deepFreeze({
136
- price: { value: 0, isUncertain: true },
541
+ $deepFreeze({
542
+ price: UNCERTAIN_ZERO_VALUE,
137
543
  input: {
138
- tokensCount: { value: 0, isUncertain: true },
139
- charactersCount: { value: 0, isUncertain: true },
140
- wordsCount: { value: 0, isUncertain: true },
141
- sentencesCount: { value: 0, isUncertain: true },
142
- linesCount: { value: 0, isUncertain: true },
143
- paragraphsCount: { value: 0, isUncertain: true },
144
- pagesCount: { value: 0, isUncertain: true },
544
+ tokensCount: UNCERTAIN_ZERO_VALUE,
545
+ charactersCount: UNCERTAIN_ZERO_VALUE,
546
+ wordsCount: UNCERTAIN_ZERO_VALUE,
547
+ sentencesCount: UNCERTAIN_ZERO_VALUE,
548
+ linesCount: UNCERTAIN_ZERO_VALUE,
549
+ paragraphsCount: UNCERTAIN_ZERO_VALUE,
550
+ pagesCount: UNCERTAIN_ZERO_VALUE,
145
551
  },
146
552
  output: {
147
- tokensCount: { value: 0, isUncertain: true },
148
- charactersCount: { value: 0, isUncertain: true },
149
- wordsCount: { value: 0, isUncertain: true },
150
- sentencesCount: { value: 0, isUncertain: true },
151
- linesCount: { value: 0, isUncertain: true },
152
- paragraphsCount: { value: 0, isUncertain: true },
153
- pagesCount: { value: 0, isUncertain: true },
553
+ tokensCount: UNCERTAIN_ZERO_VALUE,
554
+ charactersCount: UNCERTAIN_ZERO_VALUE,
555
+ wordsCount: UNCERTAIN_ZERO_VALUE,
556
+ sentencesCount: UNCERTAIN_ZERO_VALUE,
557
+ linesCount: UNCERTAIN_ZERO_VALUE,
558
+ paragraphsCount: UNCERTAIN_ZERO_VALUE,
559
+ pagesCount: UNCERTAIN_ZERO_VALUE,
154
560
  },
155
561
  });
156
562
  /**
157
563
  * Note: [💞] Ignore a discrepancy between file name and entity name
158
564
  */
159
565
 
566
+ /**
567
+ * Make UncertainNumber
568
+ *
569
+ * @param value
570
+ *
571
+ * @private utility for initializating UncertainNumber
572
+ */
573
+ function uncertainNumber(value) {
574
+ if (value === null || value === undefined || Number.isNaN(value)) {
575
+ return UNCERTAIN_ZERO_VALUE;
576
+ }
577
+ return { value };
578
+ }
579
+
160
580
  /**
161
581
  * Simple wrapper `new Date().toISOString()`
162
582
  *
@@ -230,7 +650,7 @@ Object.freeze({
230
650
  });
231
651
  /**
232
652
  * Note: [💞] Ignore a discrepancy between file name and entity name
233
- * TODO: [🧠][🧜‍♂️] Maybe join remoteUrl and path into single value
653
+ * TODO: [🧠][🧜‍♂️] Maybe join remoteServerUrl and path into single value
234
654
  */
235
655
 
236
656
  /**
@@ -846,11 +1266,17 @@ function createExecutionToolsFromVercelProvider(options) {
846
1266
  throw new PipelineExecutionError('No response message');
847
1267
  }
848
1268
  const complete = $getCurrentDate();
849
- /*
850
- TODO: [🕘] Usage count
851
- const usage = computeOpenAiUsage(content || '', resultContent || '', rawResponse);
852
- */
853
- const usage = UNCERTAIN_USAGE;
1269
+ const usage = {
1270
+ price: UNCERTAIN_ZERO_VALUE,
1271
+ input: {
1272
+ tokensCount: uncertainNumber(rawResponse.usage.promptTokens),
1273
+ ...computeUsageCounts(rawPromptContent),
1274
+ },
1275
+ output: {
1276
+ tokensCount: uncertainNumber(rawResponse.usage.completionTokens),
1277
+ ...computeUsageCounts(rawResponse.text),
1278
+ },
1279
+ };
854
1280
  return exportJson({
855
1281
  name: 'promptResult',
856
1282
  message: `Result of \`createExecutionToolsFromVercelProvider.callChatModel\``,