@promptbook/documents 0.89.0-6 โ†’ 0.89.0-8

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.
@@ -25,9 +25,10 @@ import { DEFAULT_BOOKS_DIRNAME } from '../config';
25
25
  import { DEFAULT_DOWNLOAD_CACHE_DIRNAME } from '../config';
26
26
  import { DEFAULT_EXECUTION_CACHE_DIRNAME } from '../config';
27
27
  import { DEFAULT_SCRAPE_CACHE_DIRNAME } from '../config';
28
+ import { CLI_APP_ID } from '../config';
29
+ import { PLAYGROUND_APP_ID } from '../config';
28
30
  import { DEFAULT_PIPELINE_COLLECTION_BASE_FILENAME } from '../config';
29
- import { DEFAULT_REMOTE_URL } from '../config';
30
- import { DEFAULT_REMOTE_URL_PATH } from '../config';
31
+ import { DEFAULT_REMOTE_SERVER_URL } from '../config';
31
32
  import { DEFAULT_CSV_SETTINGS } from '../config';
32
33
  import { DEFAULT_IS_VERBOSE } from '../config';
33
34
  import { SET_IS_VERBOSE } from '../config';
@@ -46,6 +47,7 @@ import type { CallbackInterfaceToolsOptions } from '../dialogs/callback/Callback
46
47
  import { BoilerplateError } from '../errors/0-BoilerplateError';
47
48
  import { PROMPTBOOK_ERRORS } from '../errors/0-index';
48
49
  import { AbstractFormatError } from '../errors/AbstractFormatError';
50
+ import { AuthenticationError } from '../errors/AuthenticationError';
49
51
  import { CollectionError } from '../errors/CollectionError';
50
52
  import { EnvironmentMismatchError } from '../errors/EnvironmentMismatchError';
51
53
  import { ExpectError } from '../errors/ExpectError';
@@ -157,9 +159,10 @@ export { DEFAULT_BOOKS_DIRNAME };
157
159
  export { DEFAULT_DOWNLOAD_CACHE_DIRNAME };
158
160
  export { DEFAULT_EXECUTION_CACHE_DIRNAME };
159
161
  export { DEFAULT_SCRAPE_CACHE_DIRNAME };
162
+ export { CLI_APP_ID };
163
+ export { PLAYGROUND_APP_ID };
160
164
  export { DEFAULT_PIPELINE_COLLECTION_BASE_FILENAME };
161
- export { DEFAULT_REMOTE_URL };
162
- export { DEFAULT_REMOTE_URL_PATH };
165
+ export { DEFAULT_REMOTE_SERVER_URL };
163
166
  export { DEFAULT_CSV_SETTINGS };
164
167
  export { DEFAULT_IS_VERBOSE };
165
168
  export { SET_IS_VERBOSE };
@@ -178,6 +181,7 @@ export type { CallbackInterfaceToolsOptions };
178
181
  export { BoilerplateError };
179
182
  export { PROMPTBOOK_ERRORS };
180
183
  export { AbstractFormatError };
184
+ export { AuthenticationError };
181
185
  export { CollectionError };
182
186
  export { EnvironmentMismatchError };
183
187
  export { ExpectError };
@@ -6,7 +6,6 @@ import type { PromptbookServer_Identification } from '../remote-server/socket-ty
6
6
  import type { PromptbookServer_ApplicationIdentification } from '../remote-server/socket-types/_subtypes/PromptbookServer_Identification';
7
7
  import type { PromptbookServer_AnonymousIdentification } from '../remote-server/socket-types/_subtypes/PromptbookServer_Identification';
8
8
  import type { RemoteClientOptions } from '../remote-server/types/RemoteClientOptions';
9
- import type { RemoteServerOptions } from '../remote-server/types/RemoteServerOptions';
10
9
  export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
11
10
  export { compilePipelineOnRemoteServer };
12
11
  export { RemoteLlmExecutionTools };
@@ -15,4 +14,3 @@ export type { PromptbookServer_Identification };
15
14
  export type { PromptbookServer_ApplicationIdentification };
16
15
  export type { PromptbookServer_AnonymousIdentification };
17
16
  export type { RemoteClientOptions };
18
- export type { RemoteServerOptions };
@@ -121,6 +121,7 @@ import type { RemoteServerOptions } from '../remote-server/types/RemoteServerOpt
121
121
  import type { AnonymousRemoteServerOptions } from '../remote-server/types/RemoteServerOptions';
122
122
  import type { ApplicationRemoteServerOptions } from '../remote-server/types/RemoteServerOptions';
123
123
  import type { ApplicationRemoteServerClientOptions } from '../remote-server/types/RemoteServerOptions';
124
+ import type { ApplicationRemoteServerOptionsLoginResponse } from '../remote-server/types/RemoteServerOptions';
124
125
  import type { Converter } from '../scrapers/_common/Converter';
125
126
  import type { ScraperAndConverterMetadata } from '../scrapers/_common/register/ScraperAndConverterMetadata';
126
127
  import type { ScraperConstructor } from '../scrapers/_common/register/ScraperConstructor';
@@ -411,6 +412,7 @@ export type { RemoteServerOptions };
411
412
  export type { AnonymousRemoteServerOptions };
412
413
  export type { ApplicationRemoteServerOptions };
413
414
  export type { ApplicationRemoteServerClientOptions };
415
+ export type { ApplicationRemoteServerOptionsLoginResponse };
414
416
  export type { Converter };
415
417
  export type { ScraperAndConverterMetadata };
416
418
  export type { ScraperConstructor };
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Note: `$` is used to indicate that this function is not a pure function - it registers an option in the CLI
4
+ *
5
+ * @private utility of CLI
6
+ */
7
+ export declare function $addGlobalOptionsToCommand(command: Command): void;
@@ -0,0 +1,15 @@
1
+ import type { CacheLlmToolsOptions } from '../../llm-providers/_common/utils/cache/CacheLlmToolsOptions';
2
+ import type { string_url } from '../../types/typeAliases';
3
+ type ProvideLlmToolsForCliOptions = Pick<CacheLlmToolsOptions, 'isCacheReloaded'> & {
4
+ cliOptions: {
5
+ verbose: boolean;
6
+ interactive: boolean;
7
+ provider: 'BYOK' | 'BRING_YOUR_OWN_KEYS' | 'REMOTE_SERVER' | 'RS' | string;
8
+ remoteServerUrl: string_url;
9
+ };
10
+ };
11
+ /**
12
+ * @private utility of CLI
13
+ */
14
+ export declare function $provideLlmToolsForCli(options: ProvideLlmToolsForCliOptions): Promise<import("../../_packages/types.index").LlmExecutionToolsWithTotalUsage>;
15
+ export {};
@@ -1,5 +1,6 @@
1
1
  import type { CsvSettings } from './formats/csv/CsvSettings';
2
2
  import type { IntermediateFilesStrategy } from './types/IntermediateFilesStrategy';
3
+ import type { string_app_id } from './types/typeAliases';
3
4
  import type { string_email } from './types/typeAliases';
4
5
  import type { string_name } from './types/typeAliases';
5
6
  import type { string_url_image } from './types/typeAliases';
@@ -208,6 +209,18 @@ export declare const DEFAULT_EXECUTION_CACHE_DIRNAME = "./.promptbook/execution-
208
209
  * @public exported from `@promptbook/core`
209
210
  */
210
211
  export declare const DEFAULT_SCRAPE_CACHE_DIRNAME = "./.promptbook/scrape-cache";
212
+ /**
213
+ * Id of application for the CLI when using remote server
214
+ *
215
+ * @public exported from `@promptbook/core`
216
+ */
217
+ export declare const CLI_APP_ID: string_app_id;
218
+ /**
219
+ * Id of application for the playground
220
+ *
221
+ * @public exported from `@promptbook/core`
222
+ */
223
+ export declare const PLAYGROUND_APP_ID: string_app_id;
211
224
  /**
212
225
  * The name of the builded pipeline collection made by CLI `ptbk make` and for lookup in `createCollectionFromDirectory`
213
226
  *
@@ -228,13 +241,7 @@ export declare const MOMENT_ARG_THRESHOLDS: {
228
241
  *
229
242
  * @public exported from `@promptbook/core`
230
243
  */
231
- export declare const DEFAULT_REMOTE_URL = "https://api.pavolhejny.com/";
232
- /**
233
- * @@@
234
- *
235
- * @public exported from `@promptbook/core`
236
- */
237
- export declare const DEFAULT_REMOTE_URL_PATH = "/promptbook/socket.io";
244
+ export declare const DEFAULT_REMOTE_SERVER_URL = "https://api.pavolhejny.com/promptbook";
238
245
  /**
239
246
  * @@@
240
247
  *
@@ -281,5 +288,5 @@ export declare const IS_PIPELINE_LOGIC_VALIDATED: boolean;
281
288
  export declare const IS_COST_PREVENTED: boolean;
282
289
  /**
283
290
  * Note: [๐Ÿ’ž] Ignore a discrepancy between file name and entity name
284
- * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteUrl and path into single value
291
+ * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteServerUrl and path into single value
285
292
  */
@@ -1,5 +1,6 @@
1
1
  import { CsvFormatError } from '../formats/csv/CsvFormatError';
2
2
  import { AbstractFormatError } from './AbstractFormatError';
3
+ import { AuthenticationError } from './AuthenticationError';
3
4
  import { CollectionError } from './CollectionError';
4
5
  import { EnvironmentMismatchError } from './EnvironmentMismatchError';
5
6
  import { ExpectError } from './ExpectError';
@@ -49,6 +50,7 @@ export declare const COMMON_JAVASCRIPT_ERRORS: {
49
50
  readonly TypeError: TypeErrorConstructor;
50
51
  readonly URIError: URIErrorConstructor;
51
52
  readonly AggregateError: AggregateErrorConstructor;
53
+ readonly AuthenticationError: typeof AuthenticationError;
52
54
  };
53
55
  /**
54
56
  * Index of all errors
@@ -64,6 +66,7 @@ export declare const ALL_ERRORS: {
64
66
  readonly TypeError: TypeErrorConstructor;
65
67
  readonly URIError: URIErrorConstructor;
66
68
  readonly AggregateError: AggregateErrorConstructor;
69
+ readonly AuthenticationError: typeof AuthenticationError;
67
70
  readonly AbstractFormatError: typeof AbstractFormatError;
68
71
  readonly CsvFormatError: typeof CsvFormatError;
69
72
  readonly CollectionError: typeof CollectionError;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * AuthenticationError is thrown from login function which is dependency of remote server
3
+ *
4
+ * @public exported from `@promptbook/core`
5
+ */
6
+ export declare class AuthenticationError extends Error {
7
+ readonly name = "AuthenticationError";
8
+ constructor(message: string);
9
+ }
@@ -1,11 +1,44 @@
1
+ import { Promisable } from 'type-fest';
2
+ import type { PromptbookServer_Identification } from '../../../remote-server/socket-types/_subtypes/PromptbookServer_Identification';
3
+ import type { really_any } from '../../../utils/organization/really_any';
4
+ import type { string_app_id } from '../../../types/typeAliases';
5
+ import type { string_url } from '../../../types/typeAliases';
1
6
  import type { CacheLlmToolsOptions } from '../utils/cache/CacheLlmToolsOptions';
2
7
  import type { LlmExecutionToolsWithTotalUsage } from '../utils/count-total-usage/LlmExecutionToolsWithTotalUsage';
8
+ type ProvideLlmToolsForWizzardOrCliOptions = Pick<CacheLlmToolsOptions, 'isCacheReloaded'> & ({
9
+ /**
10
+ * Use local keys and execute LLMs directly
11
+ */
12
+ readonly strategy: 'BRING_YOUR_OWN_KEYS';
13
+ } | {
14
+ /**
15
+ * Do not use local keys but login to Promptbook server and execute LLMs there
16
+ */
17
+ readonly strategy: 'REMOTE_SERVER';
18
+ /**
19
+ * URL of the remote server
20
+ *
21
+ * @default `DEFAULT_REMOTE_SERVER_URL`
22
+ */
23
+ readonly remoteServerUrl?: string_url;
24
+ /**
25
+ * Identifier of the application which will be passed to the remote server identification
26
+ *
27
+ * Note: This can be some id or some semantic name like "email-agent"
28
+ */
29
+ readonly appId: string_app_id;
30
+ /**
31
+ *
32
+ */
33
+ loginPrompt(): Promisable<PromptbookServer_Identification<really_any>>;
34
+ });
3
35
  /**
4
36
  * Returns LLM tools for CLI
5
37
  *
6
38
  * @private within the repository - for CLI utils
7
39
  */
8
- export declare function $provideLlmToolsForWizzardOrCli(options?: Pick<CacheLlmToolsOptions, 'isCacheReloaded'>): Promise<LlmExecutionToolsWithTotalUsage>;
40
+ export declare function $provideLlmToolsForWizzardOrCli(options?: ProvideLlmToolsForWizzardOrCliOptions): Promise<LlmExecutionToolsWithTotalUsage>;
41
+ export {};
9
42
  /**
10
43
  * Note: [๐ŸŸข] Code in this file should never be never released in packages that could be imported into browser environment
11
44
  * TODO: [๐Ÿ‘ทโ€โ™‚๏ธ] @@@ Manual about construction of llmTools
@@ -25,7 +25,7 @@ export type AnthropicClaudeExecutionToolsDirectOptions = CommonToolsOptions & Cl
25
25
  */
26
26
  export type AnthropicClaudeExecutionToolsProxiedOptions = CommonToolsOptions & ClientOptions & {
27
27
  isProxied: true;
28
- } & Pick<RemoteClientOptions<undefined>, 'remoteUrl' | 'path'>;
28
+ } & Pick<RemoteClientOptions<undefined>, 'remoteServerUrl'>;
29
29
  /**
30
30
  * TODO: [๐Ÿง ][๐Ÿคบ] Pass `userId`
31
31
  */
@@ -11,4 +11,4 @@ import type { Registration } from '../../utils/$Register';
11
11
  export declare const _AnthropicClaudeMetadataRegistration: Registration;
12
12
  /**
13
13
  * Note: [๐Ÿ’ž] Ignore a discrepancy between file name and entity name
14
- */
14
+ */
@@ -1,6 +1,5 @@
1
1
  import type { CommonToolsOptions } from '../../execution/CommonToolsOptions';
2
2
  import type { string_base_url } from '../../types/typeAliases';
3
- import type { string_uri } from '../../types/typeAliases';
4
3
  import type { PromptbookServer_Identification } from '../socket-types/_subtypes/PromptbookServer_Identification';
5
4
  /**
6
5
  * Options for `RemoteLlmExecutionTools`
@@ -12,14 +11,7 @@ export type RemoteClientOptions<TCustomOptions> = CommonToolsOptions & {
12
11
  * URL of the remote server
13
12
  * On this server will be connected to the socket.io server
14
13
  */
15
- readonly remoteUrl: string_base_url;
16
- /**
17
- * Path for the Socket.io server to listen
18
- *
19
- * @default '/socket.io'
20
- * @example '/promptbook/socket.io'
21
- */
22
- readonly path: string_uri;
14
+ readonly remoteServerUrl: string_base_url;
23
15
  /**
24
16
  * Identification of client for Socket.io remote server
25
17
  */
@@ -28,5 +20,5 @@ export type RemoteClientOptions<TCustomOptions> = CommonToolsOptions & {
28
20
  /**
29
21
  * TODO: Pass more options from Socket.io to `RemoteClientOptions` (like `transports`)
30
22
  * TODO: [๐Ÿง ][๐Ÿ›] Maybe not `isAnonymous: boolean` BUT `mode: 'ANONYMOUS'|'COLLECTION'`
31
- * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteUrl and path into single value
23
+ * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteServerUrl and path into single value
32
24
  */
@@ -1,10 +1,15 @@
1
+ import type { Request, Response } from 'express';
1
2
  import type { Promisable } from 'type-fest';
2
3
  import type { PipelineCollection } from '../../collection/PipelineCollection';
4
+ import { AuthenticationError } from '../../errors/AuthenticationError';
3
5
  import type { CommonToolsOptions } from '../../execution/CommonToolsOptions';
4
6
  import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
5
7
  import type { string_app_id } from '../../types/typeAliases';
8
+ import type { string_email } from '../../types/typeAliases';
9
+ import type { string_password } from '../../types/typeAliases';
6
10
  import type { string_uri } from '../../types/typeAliases';
7
11
  import type { string_user_id } from '../../types/typeAliases';
12
+ import type { PromptbookServer_Identification } from '../socket-types/_subtypes/PromptbookServer_Identification';
8
13
  /**
9
14
  * @@@
10
15
  *
@@ -16,7 +21,6 @@ import type { string_user_id } from '../../types/typeAliases';
16
21
  *
17
22
  * You can enable both modes at the same time.
18
23
  *
19
- * @public exported from `@promptbook/remote-client`
20
24
  * @public exported from `@promptbook/remote-server`
21
25
  */
22
26
  export type RemoteServerOptions<TCustomOptions> = CommonToolsOptions & {
@@ -32,8 +36,12 @@ export type RemoteServerOptions<TCustomOptions> = CommonToolsOptions & {
32
36
  * @default '/'
33
37
  * @example '/api/promptbook/'
34
38
  */
35
- readonly rootPath: string_uri;
36
- } & (AnonymousRemoteServerOptions | ApplicationRemoteServerOptions<TCustomOptions> | (AnonymousRemoteServerOptions & ApplicationRemoteServerOptions<TCustomOptions>));
39
+ readonly rootPath?: string_uri;
40
+ } & ((AnonymousRemoteServerOptions & {
41
+ readonly isApplicationModeAllowed?: false;
42
+ }) | ({
43
+ readonly isAnonymousModeAllowed?: false;
44
+ } & ApplicationRemoteServerOptions<TCustomOptions>) | (AnonymousRemoteServerOptions & ApplicationRemoteServerOptions<TCustomOptions>));
37
45
  export type AnonymousRemoteServerOptions = {
38
46
  /**
39
47
  * Enable anonymous mode
@@ -51,6 +59,43 @@ export type ApplicationRemoteServerOptions<TCustomOptions> = {
51
59
  * This is used to check validity of the prompt to prevent misuse
52
60
  */
53
61
  readonly collection: PipelineCollection;
62
+ /**
63
+ * User tries to login to the server, this function will be called verify the user and return the identification or throw an error
64
+ * This can be also doubled as a function to register the user
65
+ *
66
+ * Note: In most cases, you will return `PromptbookServer_ApplicationIdentification`
67
+ * `PromptbookServer_AnonymousIdentification` is useful only in scenarios when user stores its own api keys on the application server and
68
+ * server acts only as a api key provider
69
+ *
70
+ * Note: In most cases DO NOT THROW `AuthenticationError` but return `isSuccess: false` with message
71
+ * @throws `AuthenticationError` if the user is not allowed to login for example because of invalid credentials
72
+ */
73
+ login(credentials: {
74
+ /**
75
+ * Identifier of the application you are using
76
+ *
77
+ * Note: This is usefull when you use Promptbook remote server for multiple apps/frontends, if its used just for single app, use here just "app" or "your-app-name"
78
+ */
79
+ readonly appId: string_app_id | null;
80
+ /**
81
+ * Username (for example email) of the user
82
+ */
83
+ readonly username: string_email | string;
84
+ /**
85
+ * Password of the user
86
+ */
87
+ readonly password: string_password;
88
+ /**
89
+ * Request object from express if you want to access some request data for example headers, IP address, etc.
90
+ */
91
+ readonly rawRequest: Request;
92
+ /**
93
+ * Response object from express if you want to add some custom headers.
94
+ *
95
+ * Note: It is not recommended to use this object to send body of the response because it can confuse the client
96
+ */
97
+ readonly rawResponse: Response;
98
+ }): Promise<ApplicationRemoteServerOptionsLoginResponse<TCustomOptions>>;
54
99
  /**
55
100
  * Creates llm execution tools for each client
56
101
  */
@@ -82,6 +127,18 @@ export type ApplicationRemoteServerClientOptions<TCustomOptions> = {
82
127
  */
83
128
  readonly customOptions?: TCustomOptions;
84
129
  };
130
+ export type ApplicationRemoteServerOptionsLoginResponse<TCustomOptions> = {
131
+ /**
132
+ * Was the login successful
133
+ */
134
+ readonly isSuccess: boolean;
135
+ /**
136
+ *
137
+ */
138
+ readonly message?: string;
139
+ readonly error?: AuthenticationError;
140
+ readonly identification?: PromptbookServer_Identification<TCustomOptions>;
141
+ };
85
142
  /**
86
143
  * TODO: Constrain anonymous mode for specific models / providers
87
144
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/documents",
3
- "version": "0.89.0-6",
3
+ "version": "0.89.0-8",
4
4
  "description": "It's time for a paradigm shift. The future of software in plain English, French or Latin",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -47,7 +47,7 @@
47
47
  "module": "./esm/index.es.js",
48
48
  "typings": "./esm/typings/src/_packages/documents.index.d.ts",
49
49
  "peerDependencies": {
50
- "@promptbook/core": "0.89.0-6"
50
+ "@promptbook/core": "0.89.0-8"
51
51
  },
52
52
  "dependencies": {
53
53
  "colors": "1.4.0",
package/umd/index.umd.js CHANGED
@@ -26,7 +26,7 @@
26
26
  * @generated
27
27
  * @see https://github.com/webgptorg/promptbook
28
28
  */
29
- const PROMPTBOOK_ENGINE_VERSION = '0.89.0-6';
29
+ const PROMPTBOOK_ENGINE_VERSION = '0.89.0-8';
30
30
  /**
31
31
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
32
32
  * Note: [๐Ÿ’ž] Ignore a discrepancy between file name and entity name
@@ -160,6 +160,7 @@
160
160
  */
161
161
  const DEFAULT_MAX_EXECUTION_ATTEMPTS = 10; // <- TODO: [๐Ÿคนโ€โ™‚๏ธ]
162
162
  // <- TODO: [๐Ÿ•] Make also `BOOKS_DIRNAME_ALTERNATIVES`
163
+ // TODO: !!!!!! Just .promptbook dir, hardocode others
163
164
  /**
164
165
  * Where to store the temporary downloads
165
166
  *
@@ -211,7 +212,7 @@
211
212
  true);
212
213
  /**
213
214
  * Note: [๐Ÿ’ž] Ignore a discrepancy between file name and entity name
214
- * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteUrl and path into single value
215
+ * TODO: [๐Ÿง ][๐Ÿงœโ€โ™‚๏ธ] Maybe join remoteServerUrl and path into single value
215
216
  */
216
217
 
217
218
  /**
@@ -2306,6 +2307,19 @@
2306
2307
  }
2307
2308
  }
2308
2309
 
2310
+ /**
2311
+ * AuthenticationError is thrown from login function which is dependency of remote server
2312
+ *
2313
+ * @public exported from `@promptbook/core`
2314
+ */
2315
+ class AuthenticationError extends Error {
2316
+ constructor(message) {
2317
+ super(message);
2318
+ this.name = 'AuthenticationError';
2319
+ Object.setPrototypeOf(this, AuthenticationError.prototype);
2320
+ }
2321
+ }
2322
+
2309
2323
  /**
2310
2324
  * This error indicates that the pipeline collection cannot be propperly loaded
2311
2325
  *
@@ -2408,6 +2422,7 @@
2408
2422
  TypeError,
2409
2423
  URIError,
2410
2424
  AggregateError,
2425
+ AuthenticationError,
2411
2426
  /*
2412
2427
  Note: Not widely supported
2413
2428
  > InternalError,
@@ -2607,6 +2622,10 @@
2607
2622
 
2608
2623
  Cannot serialize error with name "${name}"
2609
2624
 
2625
+ Authors of Promptbook probably forgot to add this error into the list of errors:
2626
+ https://github.com/webgptorg/promptbook/blob/main/src/errors/0-index.ts
2627
+
2628
+
2610
2629
  ${block(stack || message)}
2611
2630
 
2612
2631
  `));