@promptbook/legacy-documents 0.75.3 → 0.75.5

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.
package/esm/index.es.js CHANGED
@@ -23,7 +23,7 @@ var BOOK_LANGUAGE_VERSION = '1.0.0';
23
23
  *
24
24
  * @see https://github.com/webgptorg/promptbook
25
25
  */
26
- var PROMPTBOOK_ENGINE_VERSION = '0.75.2';
26
+ var PROMPTBOOK_ENGINE_VERSION = '0.75.4';
27
27
  /**
28
28
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
29
29
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -2114,6 +2114,42 @@ var PipelineExecutionError = /** @class */ (function (_super) {
2114
2114
  return PipelineExecutionError;
2115
2115
  }(Error));
2116
2116
 
2117
+ /**
2118
+ * This error indicates problems parsing the format value
2119
+ *
2120
+ * For example, when the format value is not a valid JSON or CSV
2121
+ * This is not thrown directly but in extended classes
2122
+ *
2123
+ * @public exported from `@promptbook/core`
2124
+ */
2125
+ var AbstractFormatError = /** @class */ (function (_super) {
2126
+ __extends(AbstractFormatError, _super);
2127
+ // Note: To allow instanceof do not put here error `name`
2128
+ // public readonly name = 'AbstractFormatError';
2129
+ function AbstractFormatError(message) {
2130
+ var _this = _super.call(this, message) || this;
2131
+ Object.setPrototypeOf(_this, AbstractFormatError.prototype);
2132
+ return _this;
2133
+ }
2134
+ return AbstractFormatError;
2135
+ }(Error));
2136
+
2137
+ /**
2138
+ * This error indicates problem with parsing of CSV
2139
+ *
2140
+ * @public exported from `@promptbook/core`
2141
+ */
2142
+ var CsvFormatError = /** @class */ (function (_super) {
2143
+ __extends(CsvFormatError, _super);
2144
+ function CsvFormatError(message) {
2145
+ var _this = _super.call(this, message) || this;
2146
+ _this.name = 'CsvFormatError';
2147
+ Object.setPrototypeOf(_this, CsvFormatError.prototype);
2148
+ return _this;
2149
+ }
2150
+ return CsvFormatError;
2151
+ }(AbstractFormatError));
2152
+
2117
2153
  /**
2118
2154
  * This error indicates that the pipeline collection cannot be propperly loaded
2119
2155
  *
@@ -2187,10 +2223,14 @@ var NotYetImplementedError = /** @class */ (function (_super) {
2187
2223
  * @public exported from `@promptbook/core`
2188
2224
  */
2189
2225
  var ERRORS = {
2190
- ExpectError: ExpectError,
2226
+ AbstractFormatError: AbstractFormatError,
2227
+ CsvFormatError: CsvFormatError,
2191
2228
  CollectionError: CollectionError,
2192
2229
  EnvironmentMismatchError: EnvironmentMismatchError,
2230
+ ExpectError: ExpectError,
2231
+ KnowledgeScrapeError: KnowledgeScrapeError,
2193
2232
  LimitReachedError: LimitReachedError,
2233
+ MissingToolsError: MissingToolsError,
2194
2234
  NotFoundError: NotFoundError,
2195
2235
  NotYetImplementedError: NotYetImplementedError,
2196
2236
  ParseError: ParseError,
@@ -3161,8 +3201,8 @@ var $scrapersRegister = new $Register('scraper_constructors');
3161
3201
  *
3162
3202
  * @private internal function of `createScrapersFromConfiguration` and `createScrapersFromEnv`
3163
3203
  */
3164
- function $registeredScrapersMessage() {
3165
- var e_1, _a, e_2, _b;
3204
+ function $registeredScrapersMessage(availableScrapers) {
3205
+ var e_1, _a, e_2, _b, e_3, _c;
3166
3206
  /**
3167
3207
  * Mixes registered scrapers from $scrapersMetadataRegister and $scrapersRegister
3168
3208
  */
@@ -3174,15 +3214,15 @@ function $registeredScrapersMessage() {
3174
3214
  all.push({ packageName: packageName, className: className, mimeTypes: mimeTypes, documentationUrl: documentationUrl, isAvilableInBrowser: isAvilableInBrowser });
3175
3215
  };
3176
3216
  try {
3177
- for (var _c = __values($scrapersMetadataRegister.list()), _d = _c.next(); !_d.done; _d = _c.next()) {
3178
- var _e = _d.value, packageName = _e.packageName, className = _e.className, mimeTypes = _e.mimeTypes, documentationUrl = _e.documentationUrl, isAvilableInBrowser = _e.isAvilableInBrowser;
3217
+ for (var _d = __values($scrapersMetadataRegister.list()), _e = _d.next(); !_e.done; _e = _d.next()) {
3218
+ var _f = _e.value, packageName = _f.packageName, className = _f.className, mimeTypes = _f.mimeTypes, documentationUrl = _f.documentationUrl, isAvilableInBrowser = _f.isAvilableInBrowser;
3179
3219
  _loop_1(packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser);
3180
3220
  }
3181
3221
  }
3182
3222
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
3183
3223
  finally {
3184
3224
  try {
3185
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
3225
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
3186
3226
  }
3187
3227
  finally { if (e_1) throw e_1.error; }
3188
3228
  }
@@ -3193,18 +3233,31 @@ function $registeredScrapersMessage() {
3193
3233
  all.push({ packageName: packageName, className: className, mimeTypes: mimeTypes, documentationUrl: documentationUrl, isAvilableInBrowser: isAvilableInBrowser });
3194
3234
  };
3195
3235
  try {
3196
- for (var _f = __values($scrapersRegister.list()), _g = _f.next(); !_g.done; _g = _f.next()) {
3197
- var _h = _g.value, packageName = _h.packageName, className = _h.className, mimeTypes = _h.mimeTypes, documentationUrl = _h.documentationUrl, isAvilableInBrowser = _h.isAvilableInBrowser;
3236
+ for (var _g = __values($scrapersRegister.list()), _h = _g.next(); !_h.done; _h = _g.next()) {
3237
+ var _j = _h.value, packageName = _j.packageName, className = _j.className, mimeTypes = _j.mimeTypes, documentationUrl = _j.documentationUrl, isAvilableInBrowser = _j.isAvilableInBrowser;
3198
3238
  _loop_2(packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser);
3199
3239
  }
3200
3240
  }
3201
3241
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
3202
3242
  finally {
3203
3243
  try {
3204
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
3244
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
3205
3245
  }
3206
3246
  finally { if (e_2) throw e_2.error; }
3207
3247
  }
3248
+ try {
3249
+ for (var availableScrapers_1 = __values(availableScrapers), availableScrapers_1_1 = availableScrapers_1.next(); !availableScrapers_1_1.done; availableScrapers_1_1 = availableScrapers_1.next()) {
3250
+ var metadata_1 = availableScrapers_1_1.value.metadata;
3251
+ all.push(metadata_1);
3252
+ }
3253
+ }
3254
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
3255
+ finally {
3256
+ try {
3257
+ if (availableScrapers_1_1 && !availableScrapers_1_1.done && (_c = availableScrapers_1.return)) _c.call(availableScrapers_1);
3258
+ }
3259
+ finally { if (e_3) throw e_3.error; }
3260
+ }
3208
3261
  var metadata = all.map(function (metadata) {
3209
3262
  var isMetadataAviailable = $scrapersMetadataRegister
3210
3263
  .list()
@@ -3218,42 +3271,44 @@ function $registeredScrapersMessage() {
3218
3271
  var packageName = _a.packageName, className = _a.className;
3219
3272
  return metadata.packageName === packageName && metadata.className === className;
3220
3273
  });
3221
- return __assign(__assign({}, metadata), { isMetadataAviailable: isMetadataAviailable, isInstalled: isInstalled });
3274
+ var isAvilableInTools = availableScrapers.some(function (_a) {
3275
+ var _b = _a.metadata, packageName = _b.packageName, className = _b.className;
3276
+ return metadata.packageName === packageName && metadata.className === className;
3277
+ });
3278
+ return __assign(__assign({}, metadata), { isMetadataAviailable: isMetadataAviailable, isInstalled: isInstalled, isAvilableInTools: isAvilableInTools });
3222
3279
  });
3223
3280
  if (metadata.length === 0) {
3224
- return "No scrapers are available";
3281
+ return spaceTrim$1("\n **No scrapers are available**\n\n This is a unexpected behavior, you are probably using some broken version of Promptbook\n At least there should be available the metadata of the scrapers\n ");
3225
3282
  }
3226
3283
  return spaceTrim$1(function (block) { return "\n Available scrapers are:\n ".concat(block(metadata
3227
3284
  .map(function (_a, i) {
3228
- var packageName = _a.packageName, className = _a.className, isMetadataAviailable = _a.isMetadataAviailable, isInstalled = _a.isInstalled, mimeTypes = _a.mimeTypes, isAvilableInBrowser = _a.isAvilableInBrowser;
3229
- var more;
3230
- // TODO: Use documentationUrl
3231
- if (just(false)) {
3232
- more = '';
3233
- }
3234
- else if (!isMetadataAviailable && !isInstalled) {
3235
- // TODO: [�][�] Maybe do allow to do auto-install if package not registered and not found
3236
- more = "*(not installed and no metadata, looks like a unexpected behavior)*";
3237
- }
3238
- else if (isMetadataAviailable && !isInstalled) {
3239
- // TODO: [�][�]
3240
- more = "*(not installed)*";
3241
- }
3242
- else if (!isMetadataAviailable && isInstalled) {
3243
- more = "*(no metadata, looks like a unexpected behavior)*";
3244
- }
3245
- else if (isMetadataAviailable && isInstalled) {
3246
- more = "(installed)";
3247
- }
3248
- else {
3249
- more = "*(unknown state, looks like a unexpected behavior)*";
3250
- }
3285
+ var packageName = _a.packageName, className = _a.className, isMetadataAviailable = _a.isMetadataAviailable, isInstalled = _a.isInstalled, mimeTypes = _a.mimeTypes, isAvilableInBrowser = _a.isAvilableInBrowser, isAvilableInTools = _a.isAvilableInTools;
3286
+ var more = [];
3287
+ // TODO: [🧠] Maybe use `documentationUrl`
3288
+ if (isMetadataAviailable) {
3289
+ more.push("\u2B1C Metadata registered");
3290
+ } // not else
3291
+ if (isInstalled) {
3292
+ more.push("\uD83D\uDFE9 Installed");
3293
+ } // not else
3294
+ if (isAvilableInTools) {
3295
+ more.push("\uD83D\uDFE6 Available in tools");
3296
+ } // not else
3297
+ if (!isMetadataAviailable && isInstalled) {
3298
+ more.push("When no metadata registered but scraper is installed, it is an unexpected behavior");
3299
+ } // not else
3300
+ if (!isInstalled && isAvilableInTools) {
3301
+ more.push("When the scraper is not installed but available in tools, it is an unexpected compatibility behavior");
3302
+ } // not else
3251
3303
  if (!isAvilableInBrowser) {
3252
- more += " *(not available in browser)*";
3304
+ more.push("Not usable in browser");
3253
3305
  }
3254
- return "".concat(i + 1, ") `").concat(className, "` from `").concat(packageName, "` compatible to scrape ").concat(mimeTypes.join(', '), " ").concat(more);
3306
+ var moreText = more.length === 0 ? '' : " *(".concat(more.join('; '), ")*");
3307
+ return "".concat(i + 1, ") `").concat(className, "` from `").concat(packageName, "` compatible to scrape ").concat(mimeTypes
3308
+ .map(function (mimeType) { return "\"".concat(mimeType, "\""); })
3309
+ .join(', ')).concat(moreText);
3255
3310
  })
3256
- .join('\n')), "\n "); });
3311
+ .join('\n')), "\n\n Legend:\n - \u2B1C **Metadata registered** means that Promptbook knows about the scraper, it is similar to registration in some registry\n - \uD83D\uDFE9 **Installed** means that you have imported package with particular scraper\n - \uD83D\uDFE6 **Available in tools** means that you have passed scraper as dependency into prepare or execution process\n\n "); });
3257
3312
  }
3258
3313
  /**
3259
3314
  * TODO: [®] DRY Register logic
@@ -3455,57 +3510,75 @@ function prepareKnowledgePieces(knowledgeSources, tools, options) {
3455
3510
  _a = options.maxParallelCount, maxParallelCount = _a === void 0 ? DEFAULT_MAX_PARALLEL_COUNT : _a, rootDirname = options.rootDirname, _b = options.isVerbose, isVerbose = _b === void 0 ? DEFAULT_IS_VERBOSE : _b;
3456
3511
  knowledgePreparedUnflatten = new Array(knowledgeSources.length);
3457
3512
  return [4 /*yield*/, forEachAsync(knowledgeSources, { maxParallelCount: maxParallelCount }, function (knowledgeSource, index) { return __awaiter(_this, void 0, void 0, function () {
3458
- var partialPieces, sourceHandler, _a, _b, scraper, partialPiecesUnchecked, e_1_1, pieces;
3459
- var e_1, _c;
3460
- return __generator(this, function (_d) {
3461
- switch (_d.label) {
3513
+ var partialPieces, sourceHandler, scrapers, _loop_1, scrapers_1, scrapers_1_1, scraper, state_1, e_1_1, pieces;
3514
+ var e_1, _a;
3515
+ return __generator(this, function (_b) {
3516
+ switch (_b.label) {
3462
3517
  case 0:
3463
3518
  partialPieces = null;
3464
3519
  return [4 /*yield*/, makeKnowledgeSourceHandler(knowledgeSource, tools, { rootDirname: rootDirname, isVerbose: isVerbose })];
3465
3520
  case 1:
3466
- sourceHandler = _d.sent();
3467
- _d.label = 2;
3521
+ sourceHandler = _b.sent();
3522
+ scrapers = arrayableToArray(tools.scrapers);
3523
+ _loop_1 = function (scraper) {
3524
+ var partialPiecesUnchecked;
3525
+ return __generator(this, function (_c) {
3526
+ switch (_c.label) {
3527
+ case 0:
3528
+ if (!scraper.metadata.mimeTypes.includes(sourceHandler.mimeType)
3529
+ // <- TODO: [🦔] Implement mime-type wildcards
3530
+ ) {
3531
+ return [2 /*return*/, "continue"];
3532
+ }
3533
+ return [4 /*yield*/, scraper.scrape(sourceHandler)];
3534
+ case 1:
3535
+ partialPiecesUnchecked = _c.sent();
3536
+ if (partialPiecesUnchecked !== null) {
3537
+ partialPieces = __spreadArray([], __read(partialPiecesUnchecked), false);
3538
+ return [2 /*return*/, "break"];
3539
+ }
3540
+ console.warn(spaceTrim$1(function (block) { return "\n Cannot scrape knowledge from source despite the scraper `".concat(scraper.metadata.className, "` supports the mime type \"").concat(sourceHandler.mimeType, "\".\n \n The source:\n > ").concat(block(knowledgeSource.sourceContent
3541
+ .split('\n')
3542
+ .map(function (line) { return "> ".concat(line); })
3543
+ .join('\n')), "\n\n ").concat(block($registeredScrapersMessage(scrapers)), "\n\n\n "); }));
3544
+ return [2 /*return*/];
3545
+ }
3546
+ });
3547
+ };
3548
+ _b.label = 2;
3468
3549
  case 2:
3469
- _d.trys.push([2, 7, 8, 9]);
3470
- _a = __values(arrayableToArray(tools.scrapers)), _b = _a.next();
3471
- _d.label = 3;
3550
+ _b.trys.push([2, 7, 8, 9]);
3551
+ scrapers_1 = __values(scrapers), scrapers_1_1 = scrapers_1.next();
3552
+ _b.label = 3;
3472
3553
  case 3:
3473
- if (!!_b.done) return [3 /*break*/, 6];
3474
- scraper = _b.value;
3475
- if (!scraper.metadata.mimeTypes.includes(sourceHandler.mimeType)
3476
- // <- TODO: [🦔] Implement mime-type wildcards
3477
- ) {
3478
- return [3 /*break*/, 5];
3479
- }
3480
- return [4 /*yield*/, scraper.scrape(sourceHandler)];
3554
+ if (!!scrapers_1_1.done) return [3 /*break*/, 6];
3555
+ scraper = scrapers_1_1.value;
3556
+ return [5 /*yield**/, _loop_1(scraper)];
3481
3557
  case 4:
3482
- partialPiecesUnchecked = _d.sent();
3483
- if (partialPiecesUnchecked !== null) {
3484
- partialPieces = __spreadArray([], __read(partialPiecesUnchecked), false);
3485
- // <- TODO: [🪓] Here should be no need for spreading new array, just `partialPieces = partialPiecesUnchecked`
3558
+ state_1 = _b.sent();
3559
+ if (state_1 === "break")
3486
3560
  return [3 /*break*/, 6];
3487
- }
3488
- _d.label = 5;
3561
+ _b.label = 5;
3489
3562
  case 5:
3490
- _b = _a.next();
3563
+ scrapers_1_1 = scrapers_1.next();
3491
3564
  return [3 /*break*/, 3];
3492
3565
  case 6: return [3 /*break*/, 9];
3493
3566
  case 7:
3494
- e_1_1 = _d.sent();
3567
+ e_1_1 = _b.sent();
3495
3568
  e_1 = { error: e_1_1 };
3496
3569
  return [3 /*break*/, 9];
3497
3570
  case 8:
3498
3571
  try {
3499
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
3572
+ if (scrapers_1_1 && !scrapers_1_1.done && (_a = scrapers_1.return)) _a.call(scrapers_1);
3500
3573
  }
3501
3574
  finally { if (e_1) throw e_1.error; }
3502
3575
  return [7 /*endfinally*/];
3503
3576
  case 9:
3504
3577
  if (partialPieces === null) {
3505
- throw new KnowledgeScrapeError(spaceTrim$1(function (block) { return "\n Cannot scrape knowledge from source:\n \n > ".concat(block(knowledgeSource.sourceContent
3578
+ throw new KnowledgeScrapeError(spaceTrim$1(function (block) { return "\n Cannot scrape knowledge\n \n The source:\n > ".concat(block(knowledgeSource.sourceContent
3506
3579
  .split('\n')
3507
3580
  .map(function (line) { return "> ".concat(line); })
3508
- .join('\n')), "\n\n No scraper found for the mime type \"").concat(sourceHandler.mimeType, "\"\n\n ").concat(block($registeredScrapersMessage()), "\n\n\n "); }));
3581
+ .join('\n')), "\n\n No scraper found for the mime type \"").concat(sourceHandler.mimeType, "\"\n\n ").concat(block($registeredScrapersMessage(scrapers)), "\n\n\n "); }));
3509
3582
  }
3510
3583
  pieces = partialPieces.map(function (partialPiece) { return (__assign(__assign({}, partialPiece), { sources: [
3511
3584
  {
@@ -3931,42 +4004,6 @@ function union() {
3931
4004
  return union;
3932
4005
  }
3933
4006
 
3934
- /**
3935
- * This error indicates problems parsing the format value
3936
- *
3937
- * For example, when the format value is not a valid JSON or CSV
3938
- * This is not thrown directly but in extended classes
3939
- *
3940
- * @public exported from `@promptbook/core`
3941
- */
3942
- var AbstractFormatError = /** @class */ (function (_super) {
3943
- __extends(AbstractFormatError, _super);
3944
- // Note: To allow instanceof do not put here error `name`
3945
- // public readonly name = 'AbstractFormatError';
3946
- function AbstractFormatError(message) {
3947
- var _this = _super.call(this, message) || this;
3948
- Object.setPrototypeOf(_this, AbstractFormatError.prototype);
3949
- return _this;
3950
- }
3951
- return AbstractFormatError;
3952
- }(Error));
3953
-
3954
- /**
3955
- * This error indicates problem with parsing of CSV
3956
- *
3957
- * @public exported from `@promptbook/core`
3958
- */
3959
- var CsvFormatError = /** @class */ (function (_super) {
3960
- __extends(CsvFormatError, _super);
3961
- function CsvFormatError(message) {
3962
- var _this = _super.call(this, message) || this;
3963
- _this.name = 'CsvFormatError';
3964
- Object.setPrototypeOf(_this, CsvFormatError.prototype);
3965
- return _this;
3966
- }
3967
- return CsvFormatError;
3968
- }(AbstractFormatError));
3969
-
3970
4007
  /**
3971
4008
  * @@@
3972
4009
  *
@@ -4007,7 +4044,7 @@ var CsvFormatDefinition = {
4007
4044
  case 0:
4008
4045
  csv = parse(value, __assign(__assign({}, settings), MANDATORY_CSV_SETTINGS));
4009
4046
  if (csv.errors.length !== 0) {
4010
- throw new CsvFormatError(spaceTrim$1(function (block) { return "\n CSV parsing error\n\n ".concat(block(csv.errors.map(function (error) { return error.message; }).join('\n\n')), "\n "); }));
4047
+ throw new CsvFormatError(spaceTrim$1(function (block) { return "\n CSV parsing error\n\n Error(s) from CSV parsing:\n ".concat(block(csv.errors.map(function (error) { return error.message; }).join('\n\n')), "\n\n The CSV data:\n ").concat(block(value), "\n "); }));
4011
4048
  }
4012
4049
  return [4 /*yield*/, Promise.all(csv.data.map(function (row, index) { return __awaiter(_this, void 0, void 0, function () {
4013
4050
  var _a, _b;
@@ -4045,7 +4082,7 @@ var CsvFormatDefinition = {
4045
4082
  case 0:
4046
4083
  csv = parse(value, __assign(__assign({}, settings), MANDATORY_CSV_SETTINGS));
4047
4084
  if (csv.errors.length !== 0) {
4048
- throw new CsvFormatError(spaceTrim$1(function (block) { return "\n CSV parsing error\n\n ".concat(block(csv.errors.map(function (error) { return error.message; }).join('\n\n')), "\n "); }));
4085
+ throw new CsvFormatError(spaceTrim$1(function (block) { return "\n CSV parsing error\n\n Error(s) from CSV parsing:\n ".concat(block(csv.errors.map(function (error) { return error.message; }).join('\n\n')), "\n\n The CSV data:\n ").concat(block(value), "\n "); }));
4049
4086
  }
4050
4087
  return [4 /*yield*/, Promise.all(csv.data.map(function (row, rowIndex) { return __awaiter(_this, void 0, void 0, function () {
4051
4088
  var _this = this;