@promptbook/pdf 0.89.0-8 → 0.89.0
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/README.md +9 -11
- package/esm/index.es.js +155 -42
- package/esm/index.es.js.map +1 -1
- package/esm/typings/servers.d.ts +40 -0
- package/esm/typings/src/_packages/core.index.d.ts +12 -4
- package/esm/typings/src/_packages/remote-client.index.d.ts +6 -6
- package/esm/typings/src/_packages/remote-server.index.d.ts +6 -6
- package/esm/typings/src/_packages/types.index.d.ts +24 -14
- package/esm/typings/src/_packages/utils.index.d.ts +4 -0
- package/esm/typings/src/cli/cli-commands/login.d.ts +0 -1
- package/esm/typings/src/cli/common/$provideLlmToolsForCli.d.ts +16 -3
- package/esm/typings/src/cli/test/ptbk.d.ts +1 -1
- package/esm/typings/src/commands/EXPECT/expectCommandParser.d.ts +2 -0
- package/esm/typings/src/config.d.ts +10 -19
- package/esm/typings/src/errors/0-index.d.ts +8 -2
- package/esm/typings/src/errors/PipelineExecutionError.d.ts +1 -1
- package/esm/typings/src/errors/PromptbookFetchError.d.ts +9 -0
- package/esm/typings/src/errors/WrappedError.d.ts +10 -0
- package/esm/typings/src/errors/assertsError.d.ts +11 -0
- package/esm/typings/src/execution/PromptbookFetch.d.ts +1 -1
- package/esm/typings/src/formats/csv/utils/isValidCsvString.d.ts +9 -0
- package/esm/typings/src/formats/csv/utils/isValidCsvString.test.d.ts +1 -0
- package/esm/typings/src/formats/json/utils/isValidJsonString.d.ts +3 -0
- package/esm/typings/src/formats/xml/utils/isValidXmlString.d.ts +9 -0
- package/esm/typings/src/formats/xml/utils/isValidXmlString.test.d.ts +1 -0
- package/esm/typings/src/llm-providers/_common/register/$provideEnvFilename.d.ts +12 -0
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +2 -8
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +2 -0
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizzardOrCli.d.ts +15 -4
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsFromEnv.d.ts +1 -0
- package/esm/typings/src/remote-server/openapi-types.d.ts +284 -0
- package/esm/typings/src/remote-server/openapi.d.ts +187 -0
- package/esm/typings/src/remote-server/socket-types/_subtypes/{PromptbookServer_Identification.d.ts → Identification.d.ts} +9 -3
- package/esm/typings/src/remote-server/socket-types/_subtypes/identificationToPromptbookToken.d.ts +11 -0
- package/esm/typings/src/remote-server/socket-types/_subtypes/promptbookTokenToIdentification.d.ts +10 -0
- package/esm/typings/src/remote-server/socket-types/listModels/PromptbookServer_ListModels_Request.d.ts +2 -2
- package/esm/typings/src/remote-server/socket-types/prepare/PromptbookServer_PreparePipeline_Request.d.ts +2 -2
- package/esm/typings/src/remote-server/socket-types/prompt/PromptbookServer_Prompt_Request.d.ts +2 -2
- package/esm/typings/src/remote-server/startRemoteServer.d.ts +1 -2
- package/esm/typings/src/remote-server/types/RemoteClientOptions.d.ts +2 -2
- package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +57 -38
- package/esm/typings/src/scrapers/_common/utils/{scraperFetch.d.ts → promptbookFetch.d.ts} +2 -2
- package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +40 -0
- package/esm/typings/src/types/typeAliases.d.ts +26 -0
- package/package.json +9 -5
- package/umd/index.umd.js +155 -42
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/cli/test/ptbk2.d.ts +0 -5
- package/esm/typings/src/playground/BrjappConnector.d.ts +0 -67
- package/esm/typings/src/playground/brjapp-api-schema.d.ts +0 -12879
|
@@ -3,13 +3,15 @@ import type { Promisable } from 'type-fest';
|
|
|
3
3
|
import type { PipelineCollection } from '../../collection/PipelineCollection';
|
|
4
4
|
import { AuthenticationError } from '../../errors/AuthenticationError';
|
|
5
5
|
import type { CommonToolsOptions } from '../../execution/CommonToolsOptions';
|
|
6
|
+
import type { ExecutionTools } from '../../execution/ExecutionTools';
|
|
6
7
|
import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
|
|
7
8
|
import type { string_app_id } from '../../types/typeAliases';
|
|
8
9
|
import type { string_email } from '../../types/typeAliases';
|
|
9
10
|
import type { string_password } from '../../types/typeAliases';
|
|
10
|
-
import type {
|
|
11
|
+
import type { string_token } from '../../types/typeAliases';
|
|
11
12
|
import type { string_user_id } from '../../types/typeAliases';
|
|
12
|
-
import type {
|
|
13
|
+
import type { ApplicationModeIdentification } from '../socket-types/_subtypes/Identification';
|
|
14
|
+
import type { Identification } from '../socket-types/_subtypes/Identification';
|
|
13
15
|
/**
|
|
14
16
|
* @@@
|
|
15
17
|
*
|
|
@@ -29,14 +31,18 @@ export type RemoteServerOptions<TCustomOptions> = CommonToolsOptions & {
|
|
|
29
31
|
*/
|
|
30
32
|
readonly port: number;
|
|
31
33
|
/**
|
|
32
|
-
*
|
|
34
|
+
* Creates execution tools the client
|
|
33
35
|
*
|
|
34
|
-
*
|
|
36
|
+
* This is relevant also in anonymous mode in oposition to `createLlmExecutionTools`
|
|
35
37
|
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
+
* Note: You can provide only some tools and leave the rest to the default ones also llm tools are created by `createLlmExecutionTools`
|
|
39
|
+
* Note: This is useful when you want to provide some custom restrictions for example:
|
|
40
|
+
* - Limit access to certain websites for some users
|
|
41
|
+
* - Bind user-interface tools to email agent
|
|
42
|
+
* - Allow / block script execution
|
|
43
|
+
* - And many more
|
|
38
44
|
*/
|
|
39
|
-
|
|
45
|
+
createExecutionTools?(options: Identification<TCustomOptions>): Promisable<Partial<Omit<ExecutionTools, 'llm'>>>;
|
|
40
46
|
} & ((AnonymousRemoteServerOptions & {
|
|
41
47
|
readonly isApplicationModeAllowed?: false;
|
|
42
48
|
}) | ({
|
|
@@ -70,36 +76,11 @@ export type ApplicationRemoteServerOptions<TCustomOptions> = {
|
|
|
70
76
|
* Note: In most cases DO NOT THROW `AuthenticationError` but return `isSuccess: false` with message
|
|
71
77
|
* @throws `AuthenticationError` if the user is not allowed to login for example because of invalid credentials
|
|
72
78
|
*/
|
|
73
|
-
login(
|
|
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>>;
|
|
79
|
+
login(loginRequest: LoginRequest): Promise<LoginResponse<TCustomOptions>>;
|
|
99
80
|
/**
|
|
100
81
|
* Creates llm execution tools for each client
|
|
101
82
|
*/
|
|
102
|
-
createLlmExecutionTools(options:
|
|
83
|
+
createLlmExecutionTools(options: ApplicationModeIdentification<TCustomOptions>): Promisable<LlmExecutionTools>;
|
|
103
84
|
};
|
|
104
85
|
export type ApplicationRemoteServerClientOptions<TCustomOptions> = {
|
|
105
86
|
/**
|
|
@@ -121,23 +102,61 @@ export type ApplicationRemoteServerClientOptions<TCustomOptions> = {
|
|
|
121
102
|
*
|
|
122
103
|
* Note: This is passed for example to `createLlmExecutionTools`
|
|
123
104
|
*/
|
|
124
|
-
readonly userToken?:
|
|
105
|
+
readonly userToken?: string_token;
|
|
125
106
|
/**
|
|
126
107
|
* Additional arbitrary options to identify the client or to pass custom metadata
|
|
127
108
|
*/
|
|
128
109
|
readonly customOptions?: TCustomOptions;
|
|
129
110
|
};
|
|
130
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Login request for the application mode
|
|
113
|
+
*/
|
|
114
|
+
export type LoginRequest = {
|
|
115
|
+
/**
|
|
116
|
+
* Identifier of the application you are using
|
|
117
|
+
*
|
|
118
|
+
* 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"
|
|
119
|
+
*/
|
|
120
|
+
readonly appId: string_app_id | null;
|
|
121
|
+
/**
|
|
122
|
+
* Username (for example email) of the user
|
|
123
|
+
*/
|
|
124
|
+
readonly username: string_email | string;
|
|
125
|
+
/**
|
|
126
|
+
* Password of the user
|
|
127
|
+
*/
|
|
128
|
+
readonly password: string_password;
|
|
129
|
+
/**
|
|
130
|
+
* Request object from express if you want to access some request data for example headers, IP address, etc.
|
|
131
|
+
*/
|
|
132
|
+
readonly rawRequest: Request;
|
|
133
|
+
/**
|
|
134
|
+
* Response object from express if you want to add some custom headers.
|
|
135
|
+
*
|
|
136
|
+
* Note: It is not recommended to use this object to send body of the response because it can confuse the client
|
|
137
|
+
*/
|
|
138
|
+
readonly rawResponse: Response;
|
|
139
|
+
};
|
|
140
|
+
/**
|
|
141
|
+
* Login response for the application mode
|
|
142
|
+
*/
|
|
143
|
+
export type LoginResponse<TCustomOptions> = {
|
|
131
144
|
/**
|
|
132
145
|
* Was the login successful
|
|
133
146
|
*/
|
|
134
147
|
readonly isSuccess: boolean;
|
|
135
148
|
/**
|
|
136
|
-
*
|
|
149
|
+
* Message to display to the user, this message is always displayed
|
|
137
150
|
*/
|
|
138
151
|
readonly message?: string;
|
|
152
|
+
/**
|
|
153
|
+
* Optional error if the login was not successful
|
|
154
|
+
*/
|
|
139
155
|
readonly error?: AuthenticationError;
|
|
140
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Identification of the user to be used in the future requests
|
|
158
|
+
*/
|
|
159
|
+
readonly identification?: Identification<TCustomOptions>;
|
|
141
160
|
};
|
|
142
161
|
/**
|
|
143
162
|
* TODO: Constrain anonymous mode for specific models / providers
|
|
@@ -2,9 +2,9 @@ import type { PromptbookFetch } from '../../../execution/PromptbookFetch';
|
|
|
2
2
|
/**
|
|
3
3
|
* The built-in `fetch' function with a lightweight error handling wrapper as default fetch function used in Promptbook scrapers
|
|
4
4
|
*
|
|
5
|
-
* @
|
|
5
|
+
* @public exported from `@promptbook/core`
|
|
6
6
|
*/
|
|
7
|
-
export declare const
|
|
7
|
+
export declare const promptbookFetch: PromptbookFetch;
|
|
8
8
|
/**
|
|
9
9
|
* TODO: [🧠] Maybe rename because it is not used only for scrapers but also in `$getCompiledBook`
|
|
10
10
|
*/
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { PromptbookStorage } from '../_common/PromptbookStorage';
|
|
2
|
+
/**
|
|
3
|
+
* Stores data in .env variables
|
|
4
|
+
*
|
|
5
|
+
* Note: `$` is used to indicate that this function is not a pure function - it uses filesystem to access `.env` file and also writes to `process.env`
|
|
6
|
+
*
|
|
7
|
+
* @private within the repository - for CLI utils
|
|
8
|
+
*/
|
|
9
|
+
export declare class $EnvStorage<TItem> implements PromptbookStorage<TItem> {
|
|
10
|
+
private envFilename;
|
|
11
|
+
private $provideOrCreateEnvFile;
|
|
12
|
+
private transformKey;
|
|
13
|
+
/**
|
|
14
|
+
* Returns the number of key/value pairs currently present in the list associated with the object.
|
|
15
|
+
*/
|
|
16
|
+
get length(): number;
|
|
17
|
+
/**
|
|
18
|
+
* Empties the list associated with the object of all key/value pairs, if there are any.
|
|
19
|
+
*/
|
|
20
|
+
clear(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the current value associated with the given key, or null if the given key does not exist in the list associated with the object.
|
|
23
|
+
*/
|
|
24
|
+
getItem(key: string): Promise<TItem | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Returns the name of the nth key in the list, or null if n is greater than or equal to the number of key/value pairs in the object.
|
|
27
|
+
*/
|
|
28
|
+
key(index: number): string | null;
|
|
29
|
+
/**
|
|
30
|
+
* Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
|
|
31
|
+
*/
|
|
32
|
+
setItem(key: string, value: TItem): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Removes the key/value pair with the given key from the list associated with the object, if a key/value pair with the given key exists.
|
|
35
|
+
*/
|
|
36
|
+
removeItem(key: string): void;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* TODO: Write file more securely - ensure that there can be no accidental overwriting of existing variables and other content
|
|
40
|
+
*/
|
|
@@ -325,6 +325,12 @@ export type string_css_selector = string;
|
|
|
325
325
|
* For example `"https://collboard.com/9SeSQTupmQHwuSrLi"`
|
|
326
326
|
*/
|
|
327
327
|
export type string_url = string;
|
|
328
|
+
/**
|
|
329
|
+
* Semantic helper
|
|
330
|
+
*
|
|
331
|
+
* For example `"https://s1.ptbk.io/promptbook"`
|
|
332
|
+
*/
|
|
333
|
+
export type string_promptbook_server_url = string;
|
|
328
334
|
/**
|
|
329
335
|
* Semantic helper
|
|
330
336
|
*
|
|
@@ -408,6 +414,13 @@ export type string_host = string;
|
|
|
408
414
|
* Semantic helper
|
|
409
415
|
*/
|
|
410
416
|
export type string_protocol = 'http:' | 'https:';
|
|
417
|
+
/**
|
|
418
|
+
* Semantic helper
|
|
419
|
+
*
|
|
420
|
+
* For example `"192.168.1.1"` (IPv4)
|
|
421
|
+
* For example `"2001:0db8:85a3:0000:0000:8a2e:0370:7334"` (IPv6)
|
|
422
|
+
*/
|
|
423
|
+
export type string_ip_address = string;
|
|
411
424
|
/**
|
|
412
425
|
* Semantic helper
|
|
413
426
|
*
|
|
@@ -521,6 +534,13 @@ export type string_person_profile = string;
|
|
|
521
534
|
* For example `"MIT"`
|
|
522
535
|
*/
|
|
523
536
|
export type string_license = string;
|
|
537
|
+
/**
|
|
538
|
+
* Semantic helper
|
|
539
|
+
*
|
|
540
|
+
* For example `"Pavol Hejný <pavol@ptbk.io> (https://www.pavolhejny.com/)"`
|
|
541
|
+
* For example `"AI Web, LLC <legal@ptbk.io> (https://www.ptbk.io/)"`
|
|
542
|
+
*/
|
|
543
|
+
export type string_legal_entity = string | string_person_profile | string_title;
|
|
524
544
|
/**
|
|
525
545
|
* Semantic helper for attributes
|
|
526
546
|
*
|
|
@@ -570,6 +590,12 @@ export type string_postprocessing_function_name = string;
|
|
|
570
590
|
export type id = string | number;
|
|
571
591
|
export type task_id = string;
|
|
572
592
|
export type string_token = string;
|
|
593
|
+
/**
|
|
594
|
+
* Semantic helper
|
|
595
|
+
*
|
|
596
|
+
* Made by `identificationToPromptbookToken` exported from `@promptbook/core`
|
|
597
|
+
*/
|
|
598
|
+
export type string_promptbook_token = string_token;
|
|
573
599
|
export type string_license_token = string_token;
|
|
574
600
|
export type string_password = string;
|
|
575
601
|
export type string_ssh_key = string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@promptbook/pdf",
|
|
3
|
-
"version": "0.89.0
|
|
3
|
+
"version": "0.89.0",
|
|
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,
|
|
@@ -43,19 +43,23 @@
|
|
|
43
43
|
"url": "https://github.com/webgptorg/promptbook/issues"
|
|
44
44
|
},
|
|
45
45
|
"homepage": "https://ptbk.io/",
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=16.0.0",
|
|
48
|
+
"npm": ">=8.0.0"
|
|
49
|
+
},
|
|
46
50
|
"main": "./umd/index.umd.js",
|
|
47
51
|
"module": "./esm/index.es.js",
|
|
48
52
|
"typings": "./esm/typings/src/_packages/pdf.index.d.ts",
|
|
49
53
|
"peerDependencies": {
|
|
50
|
-
"@promptbook/core": "0.89.0
|
|
54
|
+
"@promptbook/core": "0.89.0"
|
|
51
55
|
},
|
|
52
56
|
"dependencies": {
|
|
53
|
-
"crypto": "
|
|
57
|
+
"crypto": "1.0.1",
|
|
54
58
|
"crypto-js": "4.2.0",
|
|
55
|
-
"markitdown-ts": "
|
|
59
|
+
"markitdown-ts": "0.0.4",
|
|
56
60
|
"papaparse": "5.4.1",
|
|
57
61
|
"prettier": "2.8.1",
|
|
58
|
-
"rxjs": "
|
|
62
|
+
"rxjs": "7.8.1",
|
|
59
63
|
"spacetrim": "0.11.59",
|
|
60
64
|
"waitasecond": "1.11.83"
|
|
61
65
|
}
|
package/umd/index.umd.js
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* @generated
|
|
26
26
|
* @see https://github.com/webgptorg/promptbook
|
|
27
27
|
*/
|
|
28
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.89.0
|
|
28
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.89.0';
|
|
29
29
|
/**
|
|
30
30
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
31
31
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
* @public exported from `@promptbook/core`
|
|
89
89
|
*/
|
|
90
90
|
const ADMIN_GITHUB_NAME = 'hejny';
|
|
91
|
+
// <- TODO: [🐊] Pick the best claim
|
|
91
92
|
/**
|
|
92
93
|
* When the title is not provided, the default title is used
|
|
93
94
|
*
|
|
@@ -120,6 +121,7 @@
|
|
|
120
121
|
infinity: '(infinity; ∞)',
|
|
121
122
|
negativeInfinity: '(negative infinity; -∞)',
|
|
122
123
|
unserializable: '(unserializable value)',
|
|
124
|
+
circular: '(circular JSON)',
|
|
123
125
|
};
|
|
124
126
|
/**
|
|
125
127
|
* Small number limit
|
|
@@ -159,7 +161,7 @@
|
|
|
159
161
|
*/
|
|
160
162
|
const DEFAULT_MAX_EXECUTION_ATTEMPTS = 10; // <- TODO: [🤹♂️]
|
|
161
163
|
// <- TODO: [🕝] Make also `BOOKS_DIRNAME_ALTERNATIVES`
|
|
162
|
-
// TODO:
|
|
164
|
+
// TODO: Just `.promptbook` in config, hardcode subfolders like `download-cache` or `execution-cache`
|
|
163
165
|
/**
|
|
164
166
|
* Where to store the temporary downloads
|
|
165
167
|
*
|
|
@@ -890,9 +892,60 @@
|
|
|
890
892
|
* TODO: Maybe split `ParseError` and `ApplyError`
|
|
891
893
|
*/
|
|
892
894
|
|
|
895
|
+
/**
|
|
896
|
+
* This error type indicates that somewhere in the code non-Error object was thrown and it was wrapped into the `WrappedError`
|
|
897
|
+
*
|
|
898
|
+
* @public exported from `@promptbook/core`
|
|
899
|
+
*/
|
|
900
|
+
class WrappedError extends Error {
|
|
901
|
+
constructor(whatWasThrown) {
|
|
902
|
+
const tag = `[🤮]`;
|
|
903
|
+
console.error(tag, whatWasThrown);
|
|
904
|
+
super(spaceTrim.spaceTrim(`
|
|
905
|
+
Non-Error object was thrown
|
|
906
|
+
|
|
907
|
+
Note: Look for ${tag} in the console for more details
|
|
908
|
+
Please report issue on ${ADMIN_EMAIL}
|
|
909
|
+
`));
|
|
910
|
+
this.name = 'WrappedError';
|
|
911
|
+
Object.setPrototypeOf(this, WrappedError.prototype);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/**
|
|
916
|
+
* Helper used in catch blocks to assert that the error is an instance of `Error`
|
|
917
|
+
*
|
|
918
|
+
* @param whatWasThrown Any object that was thrown
|
|
919
|
+
* @returns Nothing if the error is an instance of `Error`
|
|
920
|
+
* @throws `WrappedError` or `UnexpectedError` if the error is not standard
|
|
921
|
+
*
|
|
922
|
+
* @private within the repository
|
|
923
|
+
*/
|
|
924
|
+
function assertsError(whatWasThrown) {
|
|
925
|
+
// Case 1: Handle error which was rethrown as `WrappedError`
|
|
926
|
+
if (whatWasThrown instanceof WrappedError) {
|
|
927
|
+
const wrappedError = whatWasThrown;
|
|
928
|
+
throw wrappedError;
|
|
929
|
+
}
|
|
930
|
+
// Case 2: Handle unexpected errors
|
|
931
|
+
if (whatWasThrown instanceof UnexpectedError) {
|
|
932
|
+
const unexpectedError = whatWasThrown;
|
|
933
|
+
throw unexpectedError;
|
|
934
|
+
}
|
|
935
|
+
// Case 3: Handle standard errors - keep them up to consumer
|
|
936
|
+
if (whatWasThrown instanceof Error) {
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
// Case 4: Handle non-standard errors - wrap them into `WrappedError` and throw
|
|
940
|
+
throw new WrappedError(whatWasThrown);
|
|
941
|
+
}
|
|
942
|
+
|
|
893
943
|
/**
|
|
894
944
|
* Function isValidJsonString will tell you if the string is valid JSON or not
|
|
895
945
|
*
|
|
946
|
+
* @param value The string to check
|
|
947
|
+
* @returns True if the string is a valid JSON string, false otherwise
|
|
948
|
+
*
|
|
896
949
|
* @public exported from `@promptbook/utils`
|
|
897
950
|
*/
|
|
898
951
|
function isValidJsonString(value /* <- [👨⚖️] */) {
|
|
@@ -901,9 +954,7 @@
|
|
|
901
954
|
return true;
|
|
902
955
|
}
|
|
903
956
|
catch (error) {
|
|
904
|
-
|
|
905
|
-
throw error;
|
|
906
|
-
}
|
|
957
|
+
assertsError(error);
|
|
907
958
|
if (error.message.includes('Unexpected token')) {
|
|
908
959
|
return false;
|
|
909
960
|
}
|
|
@@ -1256,9 +1307,7 @@
|
|
|
1256
1307
|
JSON.stringify(value); // <- TODO: [0]
|
|
1257
1308
|
}
|
|
1258
1309
|
catch (error) {
|
|
1259
|
-
|
|
1260
|
-
throw error;
|
|
1261
|
-
}
|
|
1310
|
+
assertsError(error);
|
|
1262
1311
|
throw new UnexpectedError(spaceTrim__default["default"]((block) => `
|
|
1263
1312
|
\`${name}\` is not serializable
|
|
1264
1313
|
|
|
@@ -2047,7 +2096,7 @@
|
|
|
2047
2096
|
}
|
|
2048
2097
|
}
|
|
2049
2098
|
/**
|
|
2050
|
-
* TODO:
|
|
2099
|
+
* TODO: [🧠][🌂] Add id to all errors
|
|
2051
2100
|
*/
|
|
2052
2101
|
|
|
2053
2102
|
/**
|
|
@@ -2225,6 +2274,19 @@
|
|
|
2225
2274
|
}
|
|
2226
2275
|
}
|
|
2227
2276
|
|
|
2277
|
+
/**
|
|
2278
|
+
* Error thrown when a fetch request fails
|
|
2279
|
+
*
|
|
2280
|
+
* @public exported from `@promptbook/core`
|
|
2281
|
+
*/
|
|
2282
|
+
class PromptbookFetchError extends Error {
|
|
2283
|
+
constructor(message) {
|
|
2284
|
+
super(message);
|
|
2285
|
+
this.name = 'PromptbookFetchError';
|
|
2286
|
+
Object.setPrototypeOf(this, PromptbookFetchError.prototype);
|
|
2287
|
+
}
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2228
2290
|
/**
|
|
2229
2291
|
* Index of all custom errors
|
|
2230
2292
|
*
|
|
@@ -2245,7 +2307,10 @@
|
|
|
2245
2307
|
PipelineExecutionError,
|
|
2246
2308
|
PipelineLogicError,
|
|
2247
2309
|
PipelineUrlError,
|
|
2310
|
+
AuthenticationError,
|
|
2311
|
+
PromptbookFetchError,
|
|
2248
2312
|
UnexpectedError,
|
|
2313
|
+
WrappedError,
|
|
2249
2314
|
// TODO: [🪑]> VersionMismatchError,
|
|
2250
2315
|
};
|
|
2251
2316
|
/**
|
|
@@ -2262,7 +2327,6 @@
|
|
|
2262
2327
|
TypeError,
|
|
2263
2328
|
URIError,
|
|
2264
2329
|
AggregateError,
|
|
2265
|
-
AuthenticationError,
|
|
2266
2330
|
/*
|
|
2267
2331
|
Note: Not widely supported
|
|
2268
2332
|
> InternalError,
|
|
@@ -2385,8 +2449,8 @@
|
|
|
2385
2449
|
updatedAt = new Date();
|
|
2386
2450
|
errors.push(...executionResult.errors);
|
|
2387
2451
|
warnings.push(...executionResult.warnings);
|
|
2388
|
-
// <- TODO:
|
|
2389
|
-
// TODO: [🧠]
|
|
2452
|
+
// <- TODO: [🌂] Only unique errors and warnings should be added (or filtered)
|
|
2453
|
+
// TODO: [🧠] !! errors, warning, isSuccessful are redundant both in `ExecutionTask` and `ExecutionTask.currentValue`
|
|
2390
2454
|
// Also maybe move `ExecutionTask.currentValue.usage` -> `ExecutionTask.usage`
|
|
2391
2455
|
// And delete `ExecutionTask.currentValue.preparedPipeline`
|
|
2392
2456
|
assertsTaskSuccessful(executionResult);
|
|
@@ -2396,6 +2460,7 @@
|
|
|
2396
2460
|
partialResultSubject.next(executionResult);
|
|
2397
2461
|
}
|
|
2398
2462
|
catch (error) {
|
|
2463
|
+
assertsError(error);
|
|
2399
2464
|
status = 'ERROR';
|
|
2400
2465
|
errors.push(error);
|
|
2401
2466
|
partialResultSubject.error(error);
|
|
@@ -2787,14 +2852,15 @@
|
|
|
2787
2852
|
}
|
|
2788
2853
|
}
|
|
2789
2854
|
catch (error) {
|
|
2790
|
-
|
|
2855
|
+
assertsError(error);
|
|
2856
|
+
if (error instanceof UnexpectedError) {
|
|
2791
2857
|
throw error;
|
|
2792
2858
|
}
|
|
2793
2859
|
errors.push({ llmExecutionTools, error });
|
|
2794
2860
|
}
|
|
2795
2861
|
}
|
|
2796
2862
|
if (errors.length === 1) {
|
|
2797
|
-
throw errors[0];
|
|
2863
|
+
throw errors[0].error;
|
|
2798
2864
|
}
|
|
2799
2865
|
else if (errors.length > 1) {
|
|
2800
2866
|
throw new PipelineExecutionError(
|
|
@@ -3242,17 +3308,22 @@
|
|
|
3242
3308
|
/**
|
|
3243
3309
|
* The built-in `fetch' function with a lightweight error handling wrapper as default fetch function used in Promptbook scrapers
|
|
3244
3310
|
*
|
|
3245
|
-
* @
|
|
3311
|
+
* @public exported from `@promptbook/core`
|
|
3246
3312
|
*/
|
|
3247
|
-
const
|
|
3313
|
+
const promptbookFetch = async (urlOrRequest, init) => {
|
|
3248
3314
|
try {
|
|
3249
|
-
return await fetch(
|
|
3315
|
+
return await fetch(urlOrRequest, init);
|
|
3250
3316
|
}
|
|
3251
3317
|
catch (error) {
|
|
3252
|
-
|
|
3253
|
-
|
|
3318
|
+
assertsError(error);
|
|
3319
|
+
let url;
|
|
3320
|
+
if (typeof urlOrRequest === 'string') {
|
|
3321
|
+
url = urlOrRequest;
|
|
3322
|
+
}
|
|
3323
|
+
else if (urlOrRequest instanceof Request) {
|
|
3324
|
+
url = urlOrRequest.url;
|
|
3254
3325
|
}
|
|
3255
|
-
throw new
|
|
3326
|
+
throw new PromptbookFetchError(spaceTrim__default["default"]((block) => `
|
|
3256
3327
|
Can not fetch "${url}"
|
|
3257
3328
|
|
|
3258
3329
|
Fetch error:
|
|
@@ -3273,7 +3344,7 @@
|
|
|
3273
3344
|
async function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
|
|
3274
3345
|
// console.log('!! makeKnowledgeSourceHandler', knowledgeSource);
|
|
3275
3346
|
var _a;
|
|
3276
|
-
const { fetch =
|
|
3347
|
+
const { fetch = promptbookFetch } = tools;
|
|
3277
3348
|
const { knowledgeSourceContent } = knowledgeSource;
|
|
3278
3349
|
let { name } = knowledgeSource;
|
|
3279
3350
|
const { rootDirname = null,
|
|
@@ -3475,9 +3546,7 @@
|
|
|
3475
3546
|
knowledgePreparedUnflatten[index] = pieces;
|
|
3476
3547
|
}
|
|
3477
3548
|
catch (error) {
|
|
3478
|
-
|
|
3479
|
-
throw error;
|
|
3480
|
-
}
|
|
3549
|
+
assertsError(error);
|
|
3481
3550
|
console.warn(error);
|
|
3482
3551
|
// <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
|
|
3483
3552
|
}
|
|
@@ -3769,13 +3838,19 @@
|
|
|
3769
3838
|
return value.toISOString();
|
|
3770
3839
|
}
|
|
3771
3840
|
else {
|
|
3772
|
-
|
|
3841
|
+
try {
|
|
3842
|
+
return JSON.stringify(value);
|
|
3843
|
+
}
|
|
3844
|
+
catch (error) {
|
|
3845
|
+
if (error instanceof TypeError && error.message.includes('circular structure')) {
|
|
3846
|
+
return VALUE_STRINGS.circular;
|
|
3847
|
+
}
|
|
3848
|
+
throw error;
|
|
3849
|
+
}
|
|
3773
3850
|
}
|
|
3774
3851
|
}
|
|
3775
3852
|
catch (error) {
|
|
3776
|
-
|
|
3777
|
-
throw error;
|
|
3778
|
-
}
|
|
3853
|
+
assertsError(error);
|
|
3779
3854
|
console.error(error);
|
|
3780
3855
|
return VALUE_STRINGS.unserializable;
|
|
3781
3856
|
}
|
|
@@ -3832,9 +3907,7 @@
|
|
|
3832
3907
|
}
|
|
3833
3908
|
}
|
|
3834
3909
|
catch (error) {
|
|
3835
|
-
|
|
3836
|
-
throw error;
|
|
3837
|
-
}
|
|
3910
|
+
assertsError(error);
|
|
3838
3911
|
throw new ParseError(spaceTrim.spaceTrim((block) => `
|
|
3839
3912
|
Can not extract variables from the script
|
|
3840
3913
|
${block(error.stack || error.message)}
|
|
@@ -3953,6 +4026,28 @@
|
|
|
3953
4026
|
// encoding: 'utf-8',
|
|
3954
4027
|
});
|
|
3955
4028
|
|
|
4029
|
+
/**
|
|
4030
|
+
* Function to check if a string is valid CSV
|
|
4031
|
+
*
|
|
4032
|
+
* @param value The string to check
|
|
4033
|
+
* @returns True if the string is a valid CSV string, false otherwise
|
|
4034
|
+
*
|
|
4035
|
+
* @public exported from `@promptbook/utils`
|
|
4036
|
+
*/
|
|
4037
|
+
function isValidCsvString(value) {
|
|
4038
|
+
try {
|
|
4039
|
+
// A simple check for CSV format: at least one comma and no invalid characters
|
|
4040
|
+
if (value.includes(',') && /^[\w\s,"']+$/.test(value)) {
|
|
4041
|
+
return true;
|
|
4042
|
+
}
|
|
4043
|
+
return false;
|
|
4044
|
+
}
|
|
4045
|
+
catch (error) {
|
|
4046
|
+
assertsError(error);
|
|
4047
|
+
return false;
|
|
4048
|
+
}
|
|
4049
|
+
}
|
|
4050
|
+
|
|
3956
4051
|
/**
|
|
3957
4052
|
* Definition for CSV spreadsheet
|
|
3958
4053
|
*
|
|
@@ -3963,7 +4058,7 @@
|
|
|
3963
4058
|
formatName: 'CSV',
|
|
3964
4059
|
aliases: ['SPREADSHEET', 'TABLE'],
|
|
3965
4060
|
isValid(value, settings, schema) {
|
|
3966
|
-
return
|
|
4061
|
+
return isValidCsvString(value);
|
|
3967
4062
|
},
|
|
3968
4063
|
canBeValid(partialValue, settings, schema) {
|
|
3969
4064
|
return true;
|
|
@@ -4117,6 +4212,30 @@
|
|
|
4117
4212
|
* TODO: [🏢] Allow to expect something inside each item of list and other formats
|
|
4118
4213
|
*/
|
|
4119
4214
|
|
|
4215
|
+
/**
|
|
4216
|
+
* Function to check if a string is valid XML
|
|
4217
|
+
*
|
|
4218
|
+
* @param value
|
|
4219
|
+
* @returns True if the string is a valid XML string, false otherwise
|
|
4220
|
+
*
|
|
4221
|
+
* @public exported from `@promptbook/utils`
|
|
4222
|
+
*/
|
|
4223
|
+
function isValidXmlString(value) {
|
|
4224
|
+
try {
|
|
4225
|
+
const parser = new DOMParser();
|
|
4226
|
+
const parsedDocument = parser.parseFromString(value, 'application/xml');
|
|
4227
|
+
const parserError = parsedDocument.getElementsByTagName('parsererror');
|
|
4228
|
+
if (parserError.length > 0) {
|
|
4229
|
+
return false;
|
|
4230
|
+
}
|
|
4231
|
+
return true;
|
|
4232
|
+
}
|
|
4233
|
+
catch (error) {
|
|
4234
|
+
assertsError(error);
|
|
4235
|
+
return false;
|
|
4236
|
+
}
|
|
4237
|
+
}
|
|
4238
|
+
|
|
4120
4239
|
/**
|
|
4121
4240
|
* Definition for XML format
|
|
4122
4241
|
*
|
|
@@ -4126,7 +4245,7 @@
|
|
|
4126
4245
|
formatName: 'XML',
|
|
4127
4246
|
mimeType: 'application/xml',
|
|
4128
4247
|
isValid(value, settings, schema) {
|
|
4129
|
-
return
|
|
4248
|
+
return isValidXmlString(value);
|
|
4130
4249
|
},
|
|
4131
4250
|
canBeValid(partialValue, settings, schema) {
|
|
4132
4251
|
return true;
|
|
@@ -4699,9 +4818,7 @@
|
|
|
4699
4818
|
break scripts;
|
|
4700
4819
|
}
|
|
4701
4820
|
catch (error) {
|
|
4702
|
-
|
|
4703
|
-
throw error;
|
|
4704
|
-
}
|
|
4821
|
+
assertsError(error);
|
|
4705
4822
|
if (error instanceof UnexpectedError) {
|
|
4706
4823
|
throw error;
|
|
4707
4824
|
}
|
|
@@ -4771,9 +4888,7 @@
|
|
|
4771
4888
|
break scripts;
|
|
4772
4889
|
}
|
|
4773
4890
|
catch (error) {
|
|
4774
|
-
|
|
4775
|
-
throw error;
|
|
4776
|
-
}
|
|
4891
|
+
assertsError(error);
|
|
4777
4892
|
if (error instanceof UnexpectedError) {
|
|
4778
4893
|
throw error;
|
|
4779
4894
|
}
|
|
@@ -5394,9 +5509,7 @@
|
|
|
5394
5509
|
await Promise.all(resolving);
|
|
5395
5510
|
}
|
|
5396
5511
|
catch (error /* <- Note: [3] */) {
|
|
5397
|
-
|
|
5398
|
-
throw error;
|
|
5399
|
-
}
|
|
5512
|
+
assertsError(error);
|
|
5400
5513
|
// Note: No need to rethrow UnexpectedError
|
|
5401
5514
|
// if (error instanceof UnexpectedError) {
|
|
5402
5515
|
// Note: Count usage, [🧠] Maybe put to separate function executionReportJsonToUsage + DRY [🤹♂️]
|