@promptbook/cli 0.75.2 → 0.75.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.
package/esm/index.es.js CHANGED
@@ -37,7 +37,7 @@ var BOOK_LANGUAGE_VERSION = '1.0.0';
37
37
  *
38
38
  * @see https://github.com/webgptorg/promptbook
39
39
  */
40
- var PROMPTBOOK_ENGINE_VERSION = '0.75.1';
40
+ var PROMPTBOOK_ENGINE_VERSION = '0.75.3';
41
41
  /**
42
42
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
43
43
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -4955,50 +4955,63 @@ var $scrapersRegister = new $Register('scraper_constructors');
4955
4955
  *
4956
4956
  * @private internal function of `createScrapersFromConfiguration` and `createScrapersFromEnv`
4957
4957
  */
4958
- function $registeredScrapersMessage() {
4959
- var e_1, _a, e_2, _b;
4958
+ function $registeredScrapersMessage(availableScrapers) {
4959
+ var e_1, _a, e_2, _b, e_3, _c;
4960
4960
  /**
4961
4961
  * Mixes registered scrapers from $scrapersMetadataRegister and $scrapersRegister
4962
4962
  */
4963
4963
  var all = [];
4964
- var _loop_1 = function (packageName, className) {
4964
+ var _loop_1 = function (packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser) {
4965
4965
  if (all.some(function (item) { return item.packageName === packageName && item.className === className; })) {
4966
4966
  return "continue";
4967
4967
  }
4968
- all.push({ packageName: packageName, className: className });
4968
+ all.push({ packageName: packageName, className: className, mimeTypes: mimeTypes, documentationUrl: documentationUrl, isAvilableInBrowser: isAvilableInBrowser });
4969
4969
  };
4970
4970
  try {
4971
- for (var _c = __values($scrapersMetadataRegister.list()), _d = _c.next(); !_d.done; _d = _c.next()) {
4972
- var _e = _d.value, packageName = _e.packageName, className = _e.className;
4973
- _loop_1(packageName, className);
4971
+ for (var _d = __values($scrapersMetadataRegister.list()), _e = _d.next(); !_e.done; _e = _d.next()) {
4972
+ var _f = _e.value, packageName = _f.packageName, className = _f.className, mimeTypes = _f.mimeTypes, documentationUrl = _f.documentationUrl, isAvilableInBrowser = _f.isAvilableInBrowser;
4973
+ _loop_1(packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser);
4974
4974
  }
4975
4975
  }
4976
4976
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
4977
4977
  finally {
4978
4978
  try {
4979
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
4979
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
4980
4980
  }
4981
4981
  finally { if (e_1) throw e_1.error; }
4982
4982
  }
4983
- var _loop_2 = function (packageName, className) {
4983
+ var _loop_2 = function (packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser) {
4984
4984
  if (all.some(function (item) { return item.packageName === packageName && item.className === className; })) {
4985
4985
  return "continue";
4986
4986
  }
4987
- all.push({ packageName: packageName, className: className });
4987
+ all.push({ packageName: packageName, className: className, mimeTypes: mimeTypes, documentationUrl: documentationUrl, isAvilableInBrowser: isAvilableInBrowser });
4988
4988
  };
4989
4989
  try {
4990
- for (var _f = __values($scrapersRegister.list()), _g = _f.next(); !_g.done; _g = _f.next()) {
4991
- var _h = _g.value, packageName = _h.packageName, className = _h.className;
4992
- _loop_2(packageName, className);
4990
+ for (var _g = __values($scrapersRegister.list()), _h = _g.next(); !_h.done; _h = _g.next()) {
4991
+ var _j = _h.value, packageName = _j.packageName, className = _j.className, mimeTypes = _j.mimeTypes, documentationUrl = _j.documentationUrl, isAvilableInBrowser = _j.isAvilableInBrowser;
4992
+ _loop_2(packageName, className, mimeTypes, documentationUrl, isAvilableInBrowser);
4993
4993
  }
4994
4994
  }
4995
4995
  catch (e_2_1) { e_2 = { error: e_2_1 }; }
4996
4996
  finally {
4997
4997
  try {
4998
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
4998
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
4999
4999
  }
5000
5000
  finally { if (e_2) throw e_2.error; }
5001
5001
  }
5002
+ try {
5003
+ for (var availableScrapers_1 = __values(availableScrapers), availableScrapers_1_1 = availableScrapers_1.next(); !availableScrapers_1_1.done; availableScrapers_1_1 = availableScrapers_1.next()) {
5004
+ var metadata_1 = availableScrapers_1_1.value.metadata;
5005
+ all.push(metadata_1);
5006
+ }
5007
+ }
5008
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
5009
+ finally {
5010
+ try {
5011
+ if (availableScrapers_1_1 && !availableScrapers_1_1.done && (_c = availableScrapers_1.return)) _c.call(availableScrapers_1);
5012
+ }
5013
+ finally { if (e_3) throw e_3.error; }
5014
+ }
5002
5015
  var metadata = all.map(function (metadata) {
5003
5016
  var isMetadataAviailable = $scrapersMetadataRegister
5004
5017
  .list()
@@ -5012,38 +5025,44 @@ function $registeredScrapersMessage() {
5012
5025
  var packageName = _a.packageName, className = _a.className;
5013
5026
  return metadata.packageName === packageName && metadata.className === className;
5014
5027
  });
5015
- return __assign(__assign({}, metadata), { isMetadataAviailable: isMetadataAviailable, isInstalled: isInstalled });
5028
+ var isAvilableInTools = availableScrapers.some(function (_a) {
5029
+ var _b = _a.metadata, packageName = _b.packageName, className = _b.className;
5030
+ return metadata.packageName === packageName && metadata.className === className;
5031
+ });
5032
+ return __assign(__assign({}, metadata), { isMetadataAviailable: isMetadataAviailable, isInstalled: isInstalled, isAvilableInTools: isAvilableInTools });
5016
5033
  });
5017
5034
  if (metadata.length === 0) {
5018
- return "No scrapers are available";
5035
+ 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 ");
5019
5036
  }
5020
5037
  return spaceTrim$1(function (block) { return "\n Available scrapers are:\n ".concat(block(metadata
5021
5038
  .map(function (_a, i) {
5022
- var packageName = _a.packageName, className = _a.className, isMetadataAviailable = _a.isMetadataAviailable, isInstalled = _a.isInstalled;
5023
- var more;
5024
- if (just(false)) {
5025
- more = '';
5026
- }
5027
- else if (!isMetadataAviailable && !isInstalled) {
5028
- // TODO: [�][�] Maybe do allow to do auto-install if package not registered and not found
5029
- more = "(not installed and no metadata, looks like a unexpected behavior)";
5030
- }
5031
- else if (isMetadataAviailable && !isInstalled) {
5032
- // TODO: [�][�]
5033
- more = "(not installed)";
5034
- }
5035
- else if (!isMetadataAviailable && isInstalled) {
5036
- more = "(no metadata, looks like a unexpected behavior)";
5037
- }
5038
- else if (isMetadataAviailable && isInstalled) {
5039
- more = "(installed)";
5040
- }
5041
- else {
5042
- more = "(unknown state, looks like a unexpected behavior)";
5043
- }
5044
- return "".concat(i + 1, ") `").concat(className, "` from `").concat(packageName, "` ").concat(more);
5039
+ var packageName = _a.packageName, className = _a.className, isMetadataAviailable = _a.isMetadataAviailable, isInstalled = _a.isInstalled, mimeTypes = _a.mimeTypes, isAvilableInBrowser = _a.isAvilableInBrowser, isAvilableInTools = _a.isAvilableInTools;
5040
+ var more = [];
5041
+ // TODO: [🧠] Maybe use `documentationUrl`
5042
+ if (isMetadataAviailable) {
5043
+ more.push("\u2B1C Metadata registered");
5044
+ } // not else
5045
+ if (isInstalled) {
5046
+ more.push("\uD83D\uDFE9 Installed");
5047
+ } // not else
5048
+ if (isAvilableInTools) {
5049
+ more.push("\uD83D\uDFE6 Available in tools");
5050
+ } // not else
5051
+ if (!isMetadataAviailable && isInstalled) {
5052
+ more.push("When no metadata registered but scraper is installed, it is an unexpected behavior");
5053
+ } // not else
5054
+ if (!isInstalled && isAvilableInTools) {
5055
+ more.push("When the scraper is not installed but available in tools, it is an unexpected compatibility behavior");
5056
+ } // not else
5057
+ if (!isAvilableInBrowser) {
5058
+ more.push("Not usable in browser");
5059
+ }
5060
+ var moreText = more.length === 0 ? '' : " *(".concat(more.join('; '), ")*");
5061
+ return "".concat(i + 1, ") `").concat(className, "` from `").concat(packageName, "` compatible to scrape ").concat(mimeTypes
5062
+ .map(function (mimeType) { return "\"".concat(mimeType, "\""); })
5063
+ .join(', ')).concat(moreText);
5045
5064
  })
5046
- .join('\n')), "\n "); });
5065
+ .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 "); });
5047
5066
  }
5048
5067
  /**
5049
5068
  * TODO: [®] DRY Register logic
@@ -5379,54 +5398,75 @@ function prepareKnowledgePieces(knowledgeSources, tools, options) {
5379
5398
  _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;
5380
5399
  knowledgePreparedUnflatten = new Array(knowledgeSources.length);
5381
5400
  return [4 /*yield*/, forEachAsync(knowledgeSources, { maxParallelCount: maxParallelCount }, function (knowledgeSource, index) { return __awaiter(_this, void 0, void 0, function () {
5382
- var partialPieces, sourceHandler, _a, _b, scraper, partialPiecesUnchecked, e_1_1, pieces;
5383
- var e_1, _c;
5384
- return __generator(this, function (_d) {
5385
- switch (_d.label) {
5401
+ var partialPieces, sourceHandler, scrapers, _loop_1, scrapers_1, scrapers_1_1, scraper, state_1, e_1_1, pieces;
5402
+ var e_1, _a;
5403
+ return __generator(this, function (_b) {
5404
+ switch (_b.label) {
5386
5405
  case 0:
5387
5406
  partialPieces = null;
5388
5407
  return [4 /*yield*/, makeKnowledgeSourceHandler(knowledgeSource, tools, { rootDirname: rootDirname, isVerbose: isVerbose })];
5389
5408
  case 1:
5390
- sourceHandler = _d.sent();
5391
- _d.label = 2;
5409
+ sourceHandler = _b.sent();
5410
+ scrapers = arrayableToArray(tools.scrapers);
5411
+ _loop_1 = function (scraper) {
5412
+ var partialPiecesUnchecked;
5413
+ return __generator(this, function (_c) {
5414
+ switch (_c.label) {
5415
+ case 0:
5416
+ if (!scraper.metadata.mimeTypes.includes(sourceHandler.mimeType)
5417
+ // <- TODO: [🦔] Implement mime-type wildcards
5418
+ ) {
5419
+ return [2 /*return*/, "continue"];
5420
+ }
5421
+ return [4 /*yield*/, scraper.scrape(sourceHandler)];
5422
+ case 1:
5423
+ partialPiecesUnchecked = _c.sent();
5424
+ if (partialPiecesUnchecked !== null) {
5425
+ partialPieces = __spreadArray([], __read(partialPiecesUnchecked), false);
5426
+ return [2 /*return*/, "break"];
5427
+ }
5428
+ 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
5429
+ .split('\n')
5430
+ .map(function (line) { return "> ".concat(line); })
5431
+ .join('\n')), "\n\n ").concat(block($registeredScrapersMessage(scrapers)), "\n\n\n "); }));
5432
+ return [2 /*return*/];
5433
+ }
5434
+ });
5435
+ };
5436
+ _b.label = 2;
5392
5437
  case 2:
5393
- _d.trys.push([2, 7, 8, 9]);
5394
- _a = __values(arrayableToArray(tools.scrapers)), _b = _a.next();
5395
- _d.label = 3;
5438
+ _b.trys.push([2, 7, 8, 9]);
5439
+ scrapers_1 = __values(scrapers), scrapers_1_1 = scrapers_1.next();
5440
+ _b.label = 3;
5396
5441
  case 3:
5397
- if (!!_b.done) return [3 /*break*/, 6];
5398
- scraper = _b.value;
5399
- if (!scraper.metadata.mimeTypes.includes(sourceHandler.mimeType)
5400
- // <- TODO: [🦔] Implement mime-type wildcards
5401
- ) {
5402
- return [3 /*break*/, 5];
5403
- }
5404
- return [4 /*yield*/, scraper.scrape(sourceHandler)];
5442
+ if (!!scrapers_1_1.done) return [3 /*break*/, 6];
5443
+ scraper = scrapers_1_1.value;
5444
+ return [5 /*yield**/, _loop_1(scraper)];
5405
5445
  case 4:
5406
- partialPiecesUnchecked = _d.sent();
5407
- if (partialPiecesUnchecked !== null) {
5408
- partialPieces = __spreadArray([], __read(partialPiecesUnchecked), false);
5409
- // <- TODO: [🪓] Here should be no need for spreading new array, just `partialPieces = partialPiecesUnchecked`
5446
+ state_1 = _b.sent();
5447
+ if (state_1 === "break")
5410
5448
  return [3 /*break*/, 6];
5411
- }
5412
- _d.label = 5;
5449
+ _b.label = 5;
5413
5450
  case 5:
5414
- _b = _a.next();
5451
+ scrapers_1_1 = scrapers_1.next();
5415
5452
  return [3 /*break*/, 3];
5416
5453
  case 6: return [3 /*break*/, 9];
5417
5454
  case 7:
5418
- e_1_1 = _d.sent();
5455
+ e_1_1 = _b.sent();
5419
5456
  e_1 = { error: e_1_1 };
5420
5457
  return [3 /*break*/, 9];
5421
5458
  case 8:
5422
5459
  try {
5423
- if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
5460
+ if (scrapers_1_1 && !scrapers_1_1.done && (_a = scrapers_1.return)) _a.call(scrapers_1);
5424
5461
  }
5425
5462
  finally { if (e_1) throw e_1.error; }
5426
5463
  return [7 /*endfinally*/];
5427
5464
  case 9:
5428
5465
  if (partialPieces === null) {
5429
- throw new KnowledgeScrapeError(spaceTrim$1(function (block) { return "\n Cannot scrape knowledge from source: ".concat(knowledgeSource.sourceContent, "\n\n No scraper found for the mime type \"").concat(sourceHandler.mimeType, "\"\n\n ").concat(block($registeredScrapersMessage()), "\n\n\n "); }));
5466
+ throw new KnowledgeScrapeError(spaceTrim$1(function (block) { return "\n Cannot scrape knowledge\n \n The source:\n > ".concat(block(knowledgeSource.sourceContent
5467
+ .split('\n')
5468
+ .map(function (line) { return "> ".concat(line); })
5469
+ .join('\n')), "\n\n No scraper found for the mime type \"").concat(sourceHandler.mimeType, "\"\n\n ").concat(block($registeredScrapersMessage(scrapers)), "\n\n\n "); }));
5430
5470
  }
5431
5471
  pieces = partialPieces.map(function (partialPiece) { return (__assign(__assign({}, partialPiece), { sources: [
5432
5472
  {