@promptbook/cli 0.80.0-1 → 0.81.0-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.
Files changed (28) hide show
  1. package/README.md +2 -0
  2. package/esm/index.es.js +81 -56
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/core.index.d.ts +0 -6
  5. package/esm/typings/src/_packages/editable.index.d.ts +10 -0
  6. package/esm/typings/src/_packages/templates.index.d.ts +4 -0
  7. package/esm/typings/src/_packages/types.index.d.ts +4 -0
  8. package/esm/typings/src/_packages/utils.index.d.ts +2 -2
  9. package/esm/typings/src/execution/ExecutionTools.d.ts +7 -0
  10. package/esm/typings/src/execution/PromptbookFetch.d.ts +5 -0
  11. package/esm/typings/src/execution/PromptbookFetch.test-type.d.ts +5 -0
  12. package/esm/typings/src/expectations/drafts/isDomainNameFree.d.ts +2 -1
  13. package/esm/typings/src/expectations/drafts/isGithubNameFree.d.ts +2 -1
  14. package/esm/typings/src/scrapers/_common/utils/makeKnowledgeSourceHandler.d.ts +1 -1
  15. package/esm/typings/src/scrapers/_common/utils/scraperFetch.d.ts +7 -0
  16. package/esm/typings/src/utils/editable/types/PipelineEditableSerialized.d.ts +42 -0
  17. package/esm/typings/src/{conversion → utils/editable}/utils/removePipelineCommand.d.ts +3 -3
  18. package/esm/typings/src/{conversion → utils/editable}/utils/renamePipelineParameter.d.ts +3 -3
  19. package/esm/typings/src/{conversion → utils/editable}/utils/stringifyPipelineJson.d.ts +2 -2
  20. package/esm/typings/src/utils/getBookTemplate.d.ts +12 -0
  21. package/esm/typings/src/utils/parameters/{replaceParameters.d.ts → templateParameters.d.ts} +1 -1
  22. package/package.json +1 -1
  23. package/umd/index.umd.js +81 -56
  24. package/umd/index.umd.js.map +1 -1
  25. /package/esm/typings/src/{conversion → utils/editable}/utils/removePipelineCommand.test.d.ts +0 -0
  26. /package/esm/typings/src/{conversion → utils/editable}/utils/renamePipelineParameter.test.d.ts +0 -0
  27. /package/esm/typings/src/{conversion → utils/editable}/utils/stringifyPipelineJson.test.d.ts +0 -0
  28. /package/esm/typings/src/utils/parameters/{replaceParameters.test.d.ts → templateParameters.test.d.ts} +0 -0
@@ -34,9 +34,6 @@ import { pipelineJsonToString } from '../conversion/pipelineJsonToString';
34
34
  import { precompilePipeline } from '../conversion/precompilePipeline';
35
35
  import { prettifyPipelineString } from '../conversion/prettify/prettifyPipelineString';
36
36
  import { extractParameterNamesFromTask } from '../conversion/utils/extractParameterNamesFromTask';
37
- import { removePipelineCommand } from '../conversion/utils/removePipelineCommand';
38
- import { renamePipelineParameter } from '../conversion/utils/renamePipelineParameter';
39
- import { stringifyPipelineJson } from '../conversion/utils/stringifyPipelineJson';
40
37
  import { validatePipeline } from '../conversion/validation/validatePipeline';
41
38
  import { CallbackInterfaceTools } from '../dialogs/callback/CallbackInterfaceTools';
42
39
  import type { CallbackInterfaceToolsOptions } from '../dialogs/callback/CallbackInterfaceToolsOptions';
@@ -155,9 +152,6 @@ export { pipelineJsonToString };
155
152
  export { precompilePipeline };
156
153
  export { prettifyPipelineString };
157
154
  export { extractParameterNamesFromTask };
158
- export { removePipelineCommand };
159
- export { renamePipelineParameter };
160
- export { stringifyPipelineJson };
161
155
  export { validatePipeline };
162
156
  export { CallbackInterfaceTools };
163
157
  export type { CallbackInterfaceToolsOptions };
@@ -0,0 +1,10 @@
1
+ import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
+ import type { PipelineEditableSerialized } from '../utils/editable/types/PipelineEditableSerialized';
3
+ import { removePipelineCommand } from '../utils/editable/utils/removePipelineCommand';
4
+ import { renamePipelineParameter } from '../utils/editable/utils/renamePipelineParameter';
5
+ import { stringifyPipelineJson } from '../utils/editable/utils/stringifyPipelineJson';
6
+ export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
7
+ export type { PipelineEditableSerialized };
8
+ export { removePipelineCommand };
9
+ export { renamePipelineParameter };
10
+ export { stringifyPipelineJson };
@@ -0,0 +1,4 @@
1
+ import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
+ import { getBookTemplate } from '../utils/getBookTemplate';
3
+ export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
4
+ export { getBookTemplate };
@@ -30,6 +30,7 @@ import type { LlmExecutionTools } from '../execution/LlmExecutionTools';
30
30
  import type { LlmExecutionToolsConstructor } from '../execution/LlmExecutionToolsConstructor';
31
31
  import type { PipelineExecutor } from '../execution/PipelineExecutor';
32
32
  import type { PipelineExecutorResult } from '../execution/PipelineExecutorResult';
33
+ import type { PromptbookFetch } from '../execution/PromptbookFetch';
33
34
  import type { PromptResult } from '../execution/PromptResult';
34
35
  import type { CompletionPromptResult } from '../execution/PromptResult';
35
36
  import type { ChatPromptResult } from '../execution/PromptResult';
@@ -241,6 +242,7 @@ import type { number_gigabytes } from '../types/typeAliases';
241
242
  import type { number_terabytes } from '../types/typeAliases';
242
243
  import type { Registered } from '../utils/$Register';
243
244
  import type { Registration } from '../utils/$Register';
245
+ import type { PipelineEditableSerialized } from '../utils/editable/types/PipelineEditableSerialized';
244
246
  import type { ExecCommandOptions } from '../utils/execCommand/ExecCommandOptions';
245
247
  import type { ExecCommandOptionsAdvanced } from '../utils/execCommand/ExecCommandOptions';
246
248
  import type { FromtoItems } from '../utils/FromtoItems';
@@ -292,6 +294,7 @@ export type { LlmExecutionTools };
292
294
  export type { LlmExecutionToolsConstructor };
293
295
  export type { PipelineExecutor };
294
296
  export type { PipelineExecutorResult };
297
+ export type { PromptbookFetch };
295
298
  export type { PromptResult };
296
299
  export type { CompletionPromptResult };
297
300
  export type { ChatPromptResult };
@@ -503,6 +506,7 @@ export type { number_gigabytes };
503
506
  export type { number_terabytes };
504
507
  export type { Registered };
505
508
  export type { Registration };
509
+ export type { PipelineEditableSerialized };
506
510
  export type { ExecCommandOptions };
507
511
  export type { ExecCommandOptionsAdvanced };
508
512
  export type { FromtoItems };
@@ -46,7 +46,7 @@ import { searchKeywords } from '../utils/normalization/searchKeywords';
46
46
  import { titleToName } from '../utils/normalization/titleToName';
47
47
  import { spaceTrim } from '../utils/organization/spaceTrim';
48
48
  import { extractParameterNames } from '../utils/parameters/extractParameterNames';
49
- import { replaceParameters } from '../utils/parameters/replaceParameters';
49
+ import { templateParameters } from '../utils/parameters/templateParameters';
50
50
  import { parseNumber } from '../utils/parseNumber';
51
51
  import { $randomSeed } from '../utils/random/$randomSeed';
52
52
  import { removeEmojis } from '../utils/removeEmojis';
@@ -121,7 +121,7 @@ export { searchKeywords };
121
121
  export { titleToName };
122
122
  export { spaceTrim };
123
123
  export { extractParameterNames };
124
- export { replaceParameters };
124
+ export { templateParameters };
125
125
  export { parseNumber };
126
126
  export { $randomSeed };
127
127
  export { removeEmojis };
@@ -3,6 +3,7 @@ import type { Arrayable } from '../types/Arrayable';
3
3
  import type { Executables } from './Executables';
4
4
  import type { FilesystemTools } from './FilesystemTools';
5
5
  import type { LlmExecutionTools } from './LlmExecutionTools';
6
+ import type { PromptbookFetch } from './PromptbookFetch';
6
7
  import type { ScriptExecutionTools } from './ScriptExecutionTools';
7
8
  import type { UserInterfaceTools } from './UserInterfaceTools';
8
9
  /**
@@ -27,6 +28,12 @@ export type ExecutionTools = {
27
28
  * @default undefined - If not provided, no filesystem operations will be possible
28
29
  */
29
30
  readonly fs?: FilesystemTools;
31
+ /**
32
+ * Fetch function for fetching resources
33
+ *
34
+ * @default `fetch` - If not provided, the built-in `fetch' function is used with a lightweight error handling wrapper.
35
+ */
36
+ readonly fetch?: PromptbookFetch;
30
37
  /**
31
38
  * Scrapers for extracting knowledge from external sources
32
39
  *
@@ -0,0 +1,5 @@
1
+ import type { string_url } from '../types/typeAliases';
2
+ /**
3
+ * Fetch function for fetching data from the internet used in scraping
4
+ */
5
+ export type PromptbookFetch = (url: string_url, init?: RequestInit) => Promise<Response>;
@@ -0,0 +1,5 @@
1
+ export {};
2
+ /**
3
+ * Note: [⚪] This should never be in any released package
4
+ * TODO: Is this a good pattern to do type testing?
5
+ */
@@ -1,8 +1,9 @@
1
+ import type { PromptbookFetch } from '../../execution/PromptbookFetch';
1
2
  import type { string_name } from '../../types/typeAliases';
2
3
  /**
3
4
  * @private still in development
4
5
  */
5
- export declare function isDomainNameFree(name: string_name): Promise<boolean>;
6
+ export declare function isDomainNameFree(name: string_name, fetch: PromptbookFetch): Promise<boolean>;
6
7
  /**
7
8
  * TODO: [🍓][🧠] Test and implement `isDomainNameFree`
8
9
  * TODO: Export via some (and probably new) NPM package
@@ -1,8 +1,9 @@
1
+ import type { PromptbookFetch } from '../../execution/PromptbookFetch';
1
2
  import type { string_name } from '../../types/typeAliases';
2
3
  /**
3
4
  * @private still in development
4
5
  */
5
- export declare function isGithubNameFree(name: string_name): Promise<boolean>;
6
+ export declare function isGithubNameFree(name: string_name, fetch: PromptbookFetch): Promise<boolean>;
6
7
  /**
7
8
  * TODO: [🍓][🧠] Test and implement `isGithubNameFree`
8
9
  * TODO: Export via some (and probably new) NPM package
@@ -8,4 +8,4 @@ import type { ScraperSourceHandler } from '../Scraper';
8
8
  *
9
9
  * @public exported from `@promptbook/core`
10
10
  */
11
- export declare function makeKnowledgeSourceHandler(knowledgeSource: SetOptional<KnowledgeSourceJson, 'name'>, tools: Pick<ExecutionTools, 'fs'>, options?: Pick<PrepareAndScrapeOptions, 'rootDirname' | 'isVerbose'>): Promise<ScraperSourceHandler>;
11
+ export declare function makeKnowledgeSourceHandler(knowledgeSource: SetOptional<KnowledgeSourceJson, 'name'>, tools: Pick<ExecutionTools, 'fs' | 'fetch'>, options?: Pick<PrepareAndScrapeOptions, 'rootDirname' | 'isVerbose'>): Promise<ScraperSourceHandler>;
@@ -0,0 +1,7 @@
1
+ import type { PromptbookFetch } from '../../../execution/PromptbookFetch';
2
+ /**
3
+ * The built-in `fetch' function with a lightweight error handling wrapper as default fetch function used in Promptbook scrapers
4
+ *
5
+ * @private as default `fetch` function used in Promptbook scrapers
6
+ */
7
+ export declare const scraperFetch: PromptbookFetch;
@@ -0,0 +1,42 @@
1
+ import type { ErrorJson } from '../../../errors/utils/ErrorJson';
2
+ import type { PipelineJson } from '../../../pipeline/PipelineJson/PipelineJson';
3
+ import type { string_date_iso8601 } from '../../../types/typeAliases';
4
+ import type { string_pipeline_url } from '../../../types/typeAliases';
5
+ import type { PipelineString } from '../../../pipeline/PipelineString';
6
+ /**
7
+ * Represents a single pipeline in PromptbookStudio
8
+ *
9
+ * This is simple extension of PipelineJson with additional metadata
10
+ * Note: There are two similar entities:
11
+ * 1) Type (interface) `PipelineEditableSerialized` which represents just data in database
12
+ * 2) Class `PipelineEditable` which implements `PipelineEditableSerialized` and adds error handling and editing capabilities
13
+ *
14
+ * @public exported from `@promptbook/editable`
15
+ */
16
+ export type PipelineEditableSerialized = PipelineJson & {
17
+ /**
18
+ * When was the pipeline created
19
+ */
20
+ readonly createdAt: string_date_iso8601;
21
+ /**
22
+ * When was the pipeline last modified
23
+ */
24
+ readonly updatedAt: string_date_iso8601 | null;
25
+ /**
26
+ * Unique identifier of the pipeline
27
+ *
28
+ * Note: In PromptbookStudio it is required
29
+ */
30
+ readonly pipelineUrl: string_pipeline_url;
31
+ /**
32
+ * Backup of the pipeline string
33
+ *
34
+ * Note: This is present ONLY if pipelineString can not be automatically converted into json (i.e. compilePipeline throws an error)
35
+ * In other words, this is just a BACKUP of pipeline which will be deleted whener pipeline is valid again
36
+ */
37
+ readonly pipelineString: PipelineString | string | null;
38
+ /**
39
+ * Known errors to transfer to new PipelineEditable
40
+ */
41
+ readonly knownErrors: Array<ErrorJson>;
42
+ };
@@ -1,5 +1,5 @@
1
- import type { CommandType } from '../../commands/_common/types/CommandType';
2
- import type { PipelineString } from '../../pipeline/PipelineString';
1
+ import type { CommandType } from '../../../commands/_common/types/CommandType';
2
+ import type { PipelineString } from '../../../pipeline/PipelineString';
3
3
  /**
4
4
  * Options for `removePipelineCommand`
5
5
  */
@@ -16,7 +16,7 @@ type RemovePipelineCommandOptions = {
16
16
  /**
17
17
  * Function `removePipelineCommand` will remove one command from pipeline string
18
18
  *
19
- * @public exported from `@promptbook/core` <- Note: [👖] This utility is so tightly interconnected with the Promptbook that it is not exported as util but in core
19
+ * @public exported from `@promptbook/editable`
20
20
  */
21
21
  export declare function removePipelineCommand(options: RemovePipelineCommandOptions): PipelineString;
22
22
  export {};
@@ -1,5 +1,5 @@
1
- import type { PipelineJson } from '../../pipeline/PipelineJson/PipelineJson';
2
- import type { string_name } from '../../types/typeAliases';
1
+ import type { PipelineJson } from '../../../pipeline/PipelineJson/PipelineJson';
2
+ import type { string_name } from '../../../types/typeAliases';
3
3
  type RenameParameterOptions = {
4
4
  /**
5
5
  * Pipeline to search and replace for parameters
@@ -20,7 +20,7 @@ type RenameParameterOptions = {
20
20
  * In other words, it will find all parameters that are not used in the task itseld and all its dependencies
21
21
  *
22
22
  * @throws {PipelineLogicError} If the new parameter name is already used in the pipeline
23
- * @public exported from `@promptbook/core` <- Note: [👖] This utility is so tightly interconnected with the Promptbook that it is not exported as util but in core
23
+ * @public exported from `@promptbook/editable`
24
24
  */
25
25
  export declare function renamePipelineParameter(options: RenameParameterOptions): PipelineJson;
26
26
  export {};
@@ -1,11 +1,11 @@
1
- import type { string_json } from '../../types/typeAliases';
1
+ import type { string_json } from '../../../types/typeAliases';
2
2
  /**
3
3
  * Stringify the PipelineJson with proper formatting
4
4
  *
5
5
  * Note: [0] It can be used for more JSON types like whole collection of pipelines, single knowledge piece, etc.
6
6
  * Note: In contrast to JSON.stringify, this function ensures that **embedding index** is on single line
7
7
  *
8
- * @public exported from `@promptbook/core`
8
+ * @public exported from `@promptbook/editable`
9
9
  */
10
10
  export declare function stringifyPipelineJson<TType>(pipeline: TType): string_json<TType>;
11
11
  /**
@@ -0,0 +1,12 @@
1
+ import type { PipelineJson } from '../pipeline/PipelineJson/PipelineJson';
2
+ import type { string_formfactor_name } from '../formfactors/_common/string_formfactor_name';
3
+ /**
4
+ * Get template for new book
5
+ *
6
+ * @public exported from `@promptbook/templates`
7
+ */
8
+ export declare function getBookTemplate(formfactorName: string_formfactor_name): PipelineJson | null;
9
+ /**
10
+ * TODO: [🧠] Which is the best place for this function
11
+ * TODO: `book string template notation
12
+ */
@@ -9,4 +9,4 @@ import type { string_template } from '../../types/typeAliases';
9
9
  * @throws {PipelineExecutionError} if parameter is not defined, not closed, or not opened
10
10
  * @public exported from `@promptbook/utils`
11
11
  */
12
- export declare function replaceParameters(template: string_template, parameters: Parameters): string;
12
+ export declare function templateParameters(template: string_template, parameters: Parameters): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/cli",
3
- "version": "0.80.0-1",
3
+ "version": "0.81.0-5",
4
4
  "description": "It's time for a paradigm shift. The future of software in plain English, French or Latin",
5
5
  "--note-0": " <- [🐊]",
6
6
  "private": false,
package/umd/index.umd.js CHANGED
@@ -49,7 +49,7 @@
49
49
  *
50
50
  * @see https://github.com/webgptorg/promptbook
51
51
  */
52
- var PROMPTBOOK_ENGINE_VERSION = '0.80.0-0';
52
+ var PROMPTBOOK_ENGINE_VERSION = '0.81.0-4';
53
53
  /**
54
54
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
55
55
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -500,6 +500,40 @@
500
500
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
501
501
  */
502
502
 
503
+ /**
504
+ * Make error report URL for the given error
505
+ *
506
+ * @private !!!!!!
507
+ */
508
+ function getErrorReportUrl(error) {
509
+ var report = {
510
+ title: "\uD83D\uDC1C Error report from ".concat(NAME),
511
+ body: spaceTrim__default["default"](function (block) { return "\n\n\n `".concat(error.name || 'Error', "` has occurred in the [").concat(NAME, "], please look into it @").concat(ADMIN_GITHUB_NAME, ".\n\n ```\n ").concat(block(error.message || '(no error message)'), "\n ```\n\n\n ## More info:\n\n - **Promptbook engine version:** ").concat(PROMPTBOOK_ENGINE_VERSION, "\n - **Book language version:** ").concat(BOOK_LANGUAGE_VERSION, "\n - **Time:** ").concat(new Date().toISOString(), "\n\n <details>\n <summary>Stack trace:</summary>\n\n ## Stack trace:\n\n ```stacktrace\n ").concat(block(error.stack || '(empty)'), "\n ```\n </details>\n\n "); }),
512
+ };
513
+ var reportUrl = new URL("https://github.com/webgptorg/promptbook/issues/new");
514
+ reportUrl.searchParams.set('labels', 'bug');
515
+ reportUrl.searchParams.set('assignees', ADMIN_GITHUB_NAME);
516
+ reportUrl.searchParams.set('title', report.title);
517
+ reportUrl.searchParams.set('body', report.body);
518
+ return reportUrl;
519
+ }
520
+
521
+ /**
522
+ * This error type indicates that the error should not happen and its last check before crashing with some other error
523
+ *
524
+ * @public exported from `@promptbook/core`
525
+ */
526
+ var UnexpectedError = /** @class */ (function (_super) {
527
+ __extends(UnexpectedError, _super);
528
+ function UnexpectedError(message) {
529
+ var _this = _super.call(this, spaceTrim.spaceTrim(function (block) { return "\n ".concat(block(message), "\n\n Note: This error should not happen.\n It's probbably a bug in the pipeline collection\n\n Please report issue:\n ").concat(block(getErrorReportUrl(new Error(message)).href), "\n\n Or contact us on ").concat(ADMIN_EMAIL, "\n\n "); })) || this;
530
+ _this.name = 'UnexpectedError';
531
+ Object.setPrototypeOf(_this, UnexpectedError.prototype);
532
+ return _this;
533
+ }
534
+ return UnexpectedError;
535
+ }(Error));
536
+
503
537
  /**
504
538
  * Orders JSON object by keys
505
539
  *
@@ -550,40 +584,6 @@
550
584
  * TODO: [🧠] Is there a way how to meaningfully test this utility
551
585
  */
552
586
 
553
- /**
554
- * Make error report URL for the given error
555
- *
556
- * @private !!!!!!
557
- */
558
- function getErrorReportUrl(error) {
559
- var report = {
560
- title: "\uD83D\uDC1C Error report from ".concat(NAME),
561
- body: spaceTrim__default["default"](function (block) { return "\n\n\n `".concat(error.name || 'Error', "` has occurred in the [").concat(NAME, "], please look into it @").concat(ADMIN_GITHUB_NAME, ".\n\n ```\n ").concat(block(error.message || '(no error message)'), "\n ```\n\n\n ## More info:\n\n - **Promptbook engine version:** ").concat(PROMPTBOOK_ENGINE_VERSION, "\n - **Book language version:** ").concat(BOOK_LANGUAGE_VERSION, "\n - **Time:** ").concat(new Date().toISOString(), "\n\n <details>\n <summary>Stack trace:</summary>\n\n ## Stack trace:\n\n ```stacktrace\n ").concat(block(error.stack || '(empty)'), "\n ```\n </details>\n\n "); }),
562
- };
563
- var reportUrl = new URL("https://github.com/webgptorg/promptbook/issues/new");
564
- reportUrl.searchParams.set('labels', 'bug');
565
- reportUrl.searchParams.set('assignees', ADMIN_GITHUB_NAME);
566
- reportUrl.searchParams.set('title', report.title);
567
- reportUrl.searchParams.set('body', report.body);
568
- return reportUrl;
569
- }
570
-
571
- /**
572
- * This error type indicates that the error should not happen and its last check before crashing with some other error
573
- *
574
- * @public exported from `@promptbook/core`
575
- */
576
- var UnexpectedError = /** @class */ (function (_super) {
577
- __extends(UnexpectedError, _super);
578
- function UnexpectedError(message) {
579
- var _this = _super.call(this, spaceTrim.spaceTrim(function (block) { return "\n ".concat(block(message), "\n\n Note: This error should not happen.\n It's probbably a bug in the pipeline collection\n\n Please report issue:\n ").concat(block(getErrorReportUrl(new Error(message)).href), "\n\n Or contact us on ").concat(ADMIN_EMAIL, "\n\n "); })) || this;
580
- _this.name = 'UnexpectedError';
581
- Object.setPrototypeOf(_this, UnexpectedError.prototype);
582
- return _this;
583
- }
584
- return UnexpectedError;
585
- }(Error));
586
-
587
587
  /**
588
588
  * Checks if the value is [🚉] serializable as JSON
589
589
  * If not, throws an UnexpectedError with a rich error message and tracking
@@ -866,7 +866,7 @@
866
866
  * Note: [0] It can be used for more JSON types like whole collection of pipelines, single knowledge piece, etc.
867
867
  * Note: In contrast to JSON.stringify, this function ensures that **embedding index** is on single line
868
868
  *
869
- * @public exported from `@promptbook/core`
869
+ * @public exported from `@promptbook/editable`
870
870
  */
871
871
  function stringifyPipelineJson(pipeline) {
872
872
  if (!isSerializableAsJson(pipeline)) {
@@ -4602,7 +4602,7 @@
4602
4602
  * @throws {PipelineExecutionError} if parameter is not defined, not closed, or not opened
4603
4603
  * @public exported from `@promptbook/utils`
4604
4604
  */
4605
- function replaceParameters(template, parameters) {
4605
+ function templateParameters(template, parameters) {
4606
4606
  var e_1, _a;
4607
4607
  try {
4608
4608
  for (var _b = __values(Object.entries(parameters)), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -4628,7 +4628,7 @@
4628
4628
  var loopLimit = LOOP_LIMIT;
4629
4629
  var _loop_1 = function () {
4630
4630
  if (loopLimit-- < 0) {
4631
- throw new LimitReachedError('Loop limit reached during parameters replacement in `replaceParameters`');
4631
+ throw new LimitReachedError('Loop limit reached during parameters replacement in `templateParameters`');
4632
4632
  }
4633
4633
  var precol = match.groups.precol;
4634
4634
  var parameterName = match.groups.parameterName;
@@ -4880,7 +4880,7 @@
4880
4880
  }
4881
4881
  return [3 /*break*/, 24];
4882
4882
  case 2:
4883
- $ongoingTaskResult.$resultString = replaceParameters(preparedContent, parameters);
4883
+ $ongoingTaskResult.$resultString = templateParameters(preparedContent, parameters);
4884
4884
  return [3 /*break*/, 25];
4885
4885
  case 3:
4886
4886
  modelRequirements = __assign(__assign({ modelVariant: 'CHAT' }, (preparedPipeline.defaultModelRequirements || {})), (task.modelRequirements || {}));
@@ -5003,8 +5003,8 @@
5003
5003
  _j = $ongoingTaskResult;
5004
5004
  return [4 /*yield*/, tools.userInterface.promptDialog($deepFreeze({
5005
5005
  promptTitle: task.title,
5006
- promptMessage: replaceParameters(task.description || '', parameters),
5007
- defaultValue: replaceParameters(preparedContent, parameters),
5006
+ promptMessage: templateParameters(task.description || '', parameters),
5007
+ defaultValue: templateParameters(preparedContent, parameters),
5008
5008
  // TODO: [🧠] !! Figure out how to define placeholder in .book.md file
5009
5009
  placeholder: undefined,
5010
5010
  priority: priority,
@@ -5128,7 +5128,7 @@
5128
5128
  if (!isJokerAttempt &&
5129
5129
  task.taskType === 'PROMPT_TASK' &&
5130
5130
  $ongoingTaskResult.$prompt
5131
- // <- Note: [2] When some expected parameter is not defined, error will occur in replaceParameters
5131
+ // <- Note: [2] When some expected parameter is not defined, error will occur in templateParameters
5132
5132
  // In that case we don’t want to make a report about it because it’s not a llm execution error
5133
5133
  ) {
5134
5134
  // TODO: [🧠] Maybe put other taskTypes into report
@@ -6192,6 +6192,30 @@
6192
6192
  return match ? match[1].toLowerCase() : null;
6193
6193
  }
6194
6194
 
6195
+ /**
6196
+ * The built-in `fetch' function with a lightweight error handling wrapper as default fetch function used in Promptbook scrapers
6197
+ *
6198
+ * @private as default `fetch` function used in Promptbook scrapers
6199
+ */
6200
+ var scraperFetch = function (url, init) { return __awaiter(void 0, void 0, void 0, function () {
6201
+ var error_1;
6202
+ return __generator(this, function (_a) {
6203
+ switch (_a.label) {
6204
+ case 0:
6205
+ _a.trys.push([0, 2, , 3]);
6206
+ return [4 /*yield*/, fetch(url, init)];
6207
+ case 1: return [2 /*return*/, _a.sent()];
6208
+ case 2:
6209
+ error_1 = _a.sent();
6210
+ if (!(error_1 instanceof Error)) {
6211
+ throw error_1;
6212
+ }
6213
+ throw new KnowledgeScrapeError(spaceTrim__default["default"](function (block) { return "\n Can not fetch \"".concat(url, "\"\n\n Fetch error:\n ").concat(block(error_1.message), "\n\n "); }));
6214
+ case 3: return [2 /*return*/];
6215
+ }
6216
+ });
6217
+ }); };
6218
+
6195
6219
  /**
6196
6220
  * @@@
6197
6221
  *
@@ -6200,13 +6224,14 @@
6200
6224
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
6201
6225
  var _a;
6202
6226
  return __awaiter(this, void 0, void 0, function () {
6203
- var sourceContent, name, _b, _c, rootDirname, url, response_1, mimeType, filename_1, fileExtension, mimeType;
6204
- return __generator(this, function (_e) {
6205
- switch (_e.label) {
6227
+ var _b, fetch, sourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, filename_1, fileExtension, mimeType;
6228
+ return __generator(this, function (_f) {
6229
+ switch (_f.label) {
6206
6230
  case 0:
6231
+ _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
6207
6232
  sourceContent = knowledgeSource.sourceContent;
6208
6233
  name = knowledgeSource.name;
6209
- _b = options || {}, _c = _b.rootDirname, rootDirname = _c === void 0 ? null : _c, _b.isVerbose;
6234
+ _c = options || {}, _d = _c.rootDirname, rootDirname = _d === void 0 ? null : _d, _c.isVerbose;
6210
6235
  if (!name) {
6211
6236
  name = sourceContentToName(sourceContent);
6212
6237
  }
@@ -6214,7 +6239,7 @@
6214
6239
  url = sourceContent;
6215
6240
  return [4 /*yield*/, fetch(url)];
6216
6241
  case 1:
6217
- response_1 = _e.sent();
6242
+ response_1 = _f.sent();
6218
6243
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
6219
6244
  return [2 /*return*/, {
6220
6245
  source: name,
@@ -6271,7 +6296,7 @@
6271
6296
  mimeType = extensionToMimeType(fileExtension || '');
6272
6297
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
6273
6298
  case 3:
6274
- if (!(_e.sent())) {
6299
+ if (!(_f.sent())) {
6275
6300
  throw new NotFoundError(spaceTrim__default["default"](function (block) { return "\n Can not make source handler for file which does not exist:\n\n File:\n ".concat(block(filename_1), "\n "); }));
6276
6301
  }
6277
6302
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)
@@ -13198,7 +13223,7 @@
13198
13223
  throw new PipelineExecutionError('Use callChatModel only for CHAT variant');
13199
13224
  }
13200
13225
  modelName = modelRequirements.modelName || this.getDefaultChatModel().modelName;
13201
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
13226
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
13202
13227
  rawRequest = {
13203
13228
  model: modelRequirements.modelName || this.getDefaultChatModel().modelName,
13204
13229
  max_tokens: modelRequirements.maxTokens || 4096,
@@ -14004,7 +14029,7 @@
14004
14029
  // <- TODO: [🈁] Use `seed` here AND/OR use is `isDeterministic` for entire execution tools
14005
14030
  // <- Note: [🧆]
14006
14031
  };
14007
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14032
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14008
14033
  messages = __spreadArray(__spreadArray([], __read((modelRequirements.systemMessage === undefined
14009
14034
  ? []
14010
14035
  : [
@@ -14119,7 +14144,7 @@
14119
14144
  console.info(colors__default["default"].bgWhite('content'), JSON.stringify(content, null, 4));
14120
14145
  console.info(colors__default["default"].bgWhite('parameters'), JSON.stringify(parameters, null, 4));
14121
14146
  }
14122
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14147
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14123
14148
  rawRequest = [
14124
14149
  modelName,
14125
14150
  [rawPromptContent],
@@ -14387,7 +14412,7 @@
14387
14412
  return [4 /*yield*/, vercelProvider.chat(modelName, __assign({ user: (userId === null || userId === void 0 ? void 0 : userId.toString()) || undefined }, additionalChatSettings))];
14388
14413
  case 1:
14389
14414
  model = _b.sent();
14390
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14415
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14391
14416
  rawRequest = {
14392
14417
  // <- TODO: [☂]
14393
14418
  inputFormat: 'messages',
@@ -14784,7 +14809,7 @@
14784
14809
  type: 'json_object',
14785
14810
  };
14786
14811
  }
14787
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14812
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14788
14813
  rawRequest = __assign(__assign({}, modelSettings), { messages: __spreadArray(__spreadArray([], __read((modelRequirements.systemMessage === undefined
14789
14814
  ? []
14790
14815
  : [
@@ -14880,7 +14905,7 @@
14880
14905
  // <- TODO: [🈁] Use `seed` here AND/OR use is `isDeterministic` for entire execution tools
14881
14906
  // <- Note: [🧆]
14882
14907
  };
14883
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14908
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14884
14909
  rawRequest = __assign(__assign({}, modelSettings), { prompt: rawPromptContent, user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString() });
14885
14910
  start = $getCurrentDate();
14886
14911
  if (this.options.isVerbose) {
@@ -14952,7 +14977,7 @@
14952
14977
  throw new PipelineExecutionError('Use embed only for EMBEDDING variant');
14953
14978
  }
14954
14979
  modelName = modelRequirements.modelName || this.getDefaultEmbeddingModel().modelName;
14955
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14980
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
14956
14981
  rawRequest = {
14957
14982
  input: rawPromptContent,
14958
14983
  model: modelName,
@@ -15122,7 +15147,7 @@
15122
15147
  }
15123
15148
  finally { if (e_1) throw e_1.error; }
15124
15149
  }
15125
- rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: 'assistant' }));
15150
+ rawPromptContent = templateParameters(content, __assign(__assign({}, parameters), { modelName: 'assistant' }));
15126
15151
  rawRequest = {
15127
15152
  // TODO: [👨‍👨‍👧‍👧] ...modelSettings,
15128
15153
  // TODO: [👨‍👨‍👧‍👧][🧠] What about system message for assistants, does it make sence - combination of OpenAI assistants with Promptbook Personas