@promptbook/remote-server 0.84.0-16 → 0.84.0-18

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.
@@ -14,6 +14,7 @@ import { DEFAULT_BOOK_TITLE } from '../config';
14
14
  import { DEFAULT_TASK_TITLE } from '../config';
15
15
  import { DEFAULT_PROMPT_TASK_TITLE } from '../config';
16
16
  import { DEFAULT_BOOK_OUTPUT_PARAMETER_NAME } from '../config';
17
+ import { DEFAULT_MAX_FILE_SIZE } from '../config';
17
18
  import { MAX_FILENAME_LENGTH } from '../config';
18
19
  import { DEFAULT_INTERMEDIATE_FILES_STRATEGY } from '../config';
19
20
  import { DEFAULT_MAX_PARALLEL_COUNT } from '../config';
@@ -144,6 +145,7 @@ export { DEFAULT_BOOK_TITLE };
144
145
  export { DEFAULT_TASK_TITLE };
145
146
  export { DEFAULT_PROMPT_TASK_TITLE };
146
147
  export { DEFAULT_BOOK_OUTPUT_PARAMETER_NAME };
148
+ export { DEFAULT_MAX_FILE_SIZE };
147
149
  export { MAX_FILENAME_LENGTH };
148
150
  export { DEFAULT_INTERMEDIATE_FILES_STRATEGY };
149
151
  export { DEFAULT_MAX_PARALLEL_COUNT };
@@ -77,6 +77,12 @@ export declare const DEFAULT_PROMPT_TASK_TITLE = "Prompt";
77
77
  * @public exported from `@promptbook/core`
78
78
  */
79
79
  export declare const DEFAULT_BOOK_OUTPUT_PARAMETER_NAME = "result";
80
+ /**
81
+ * Maximum file size limit
82
+ *
83
+ * @public exported from `@promptbook/core`
84
+ */
85
+ export declare const DEFAULT_MAX_FILE_SIZE: number;
80
86
  /**
81
87
  * Warning message for the generated sections and files files
82
88
  *
@@ -17,5 +17,5 @@ import type { RemoteClientOptions } from '../remote-server/types/RemoteClientOpt
17
17
  */
18
18
  export declare function compilePipelineOnRemoteServer<TCustomOptions = undefined>(pipelineString: PipelineString, options: RemoteClientOptions<TCustomOptions>): Promise<PipelineJson>;
19
19
  /**
20
- * TODO: !!!! Do not return Promise<PipelineJson> But PreparePipelineTask
20
+ * TODO: [🐚] Do not return Promise<PipelineJson> But PreparePipelineTask
21
21
  */
@@ -13,5 +13,5 @@ import type { RemoteClientOptions } from '../remote-server/types/RemoteClientOpt
13
13
  */
14
14
  export declare function preparePipelineOnRemoteServer<TCustomOptions = undefined>(pipeline: PipelineJson, options: RemoteClientOptions<TCustomOptions>): Promise<PipelineJson>;
15
15
  /**
16
- * TODO: !!!! Do not return Promise<PipelineJson> But PreparePipelineTask
16
+ * TODO: [🐚] Do not return Promise<PipelineJson> But PreparePipelineTask
17
17
  */
@@ -9,7 +9,7 @@ import type { ApplicationRemoteServerClientOptions } from '../../types/RemoteSer
9
9
  */
10
10
  export type PromptbookServer_Identification<TCustomOptions> = PromptbookServer_ApplicationIdentification<TCustomOptions> | PromptbookServer_AnonymousIdentification;
11
11
  /**
12
- * Application mode is @@@!!!
12
+ * Application mode is situation when you run known and well-defined books with your own api keys
13
13
  *
14
14
  * @public exported from `@promptbook/remote-server`
15
15
  * @public exported from `@promptbook/remote-client`
@@ -21,7 +21,10 @@ export type PromptbookServer_ApplicationIdentification<TCustomOptions> = Applica
21
21
  readonly isAnonymous: false;
22
22
  };
23
23
  /**
24
- * Anonymous mode is @@@!!!
24
+ * Anonymous mode is when you run arbitrary user books without api keys from user
25
+ *
26
+ * Note: This is useful in situations when the LLM provider does not allow to call the API requests from the client side
27
+ * It is kind of a proxy mode
25
28
  *
26
29
  * @public exported from `@promptbook/remote-server`
27
30
  * @public exported from `@promptbook/remote-client`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/remote-server",
3
- "version": "0.84.0-16",
3
+ "version": "0.84.0-18",
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,
@@ -8,8 +8,10 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/webgptorg/promptbook"
10
10
  },
11
+ "author": "Pavol Hejný <pavol@ptbk.io> (https://www.pavolhejny.com/)",
11
12
  "contributors": [
12
- "Pavol Hejný <pavol@ptbk.io> (https://www.pavolhejny.com/)"
13
+ "Pavol Hejný <pavol@ptbk.io> (https://www.pavolhejny.com/)",
14
+ "Jiří Jahn <jiri@ptbk.io> (https://www.ptbk.io/)"
13
15
  ],
14
16
  "keywords": [
15
17
  "ai",
@@ -23,6 +25,9 @@
23
25
  "natural-language-processing",
24
26
  "nlp",
25
27
  "openai",
28
+ "o3",
29
+ "o3-mini",
30
+ "deepseek",
26
31
  "gpt-3",
27
32
  "gpt-4",
28
33
  "gpt-4o",
@@ -33,7 +38,7 @@
33
38
  "anthropic",
34
39
  "LLMOps"
35
40
  ],
36
- "license": "FSL-1.1-Apache-2.0",
41
+ "license": "UNLICENSED",
37
42
  "bugs": {
38
43
  "url": "https://github.com/webgptorg/promptbook/issues"
39
44
  },
@@ -42,7 +47,7 @@
42
47
  "module": "./esm/index.es.js",
43
48
  "typings": "./esm/typings/src/_packages/remote-server.index.d.ts",
44
49
  "peerDependencies": {
45
- "@promptbook/core": "0.84.0-16"
50
+ "@promptbook/core": "0.84.0-18"
46
51
  },
47
52
  "dependencies": {
48
53
  "colors": "1.4.0",
package/umd/index.umd.js CHANGED
@@ -27,7 +27,7 @@
27
27
  * @generated
28
28
  * @see https://github.com/webgptorg/promptbook
29
29
  */
30
- var PROMPTBOOK_ENGINE_VERSION = '0.84.0-15';
30
+ var PROMPTBOOK_ENGINE_VERSION = '0.84.0-17';
31
31
  /**
32
32
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
33
33
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -198,6 +198,12 @@
198
198
  * @public exported from `@promptbook/core`
199
199
  */
200
200
  var DEFAULT_BOOK_TITLE = "\u2728 Untitled Book";
201
+ /**
202
+ * Maximum file size limit
203
+ *
204
+ * @public exported from `@promptbook/core`
205
+ */
206
+ var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
201
207
  // <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
202
208
  /**
203
209
  * The maximum number of iterations for a loops
@@ -6231,11 +6237,10 @@
6231
6237
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
6232
6238
  var _a;
6233
6239
  return __awaiter(this, void 0, void 0, function () {
6234
- var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, _f, _g, _h, _j, _k, filename_1, fileExtension, mimeType;
6235
- return __generator(this, function (_l) {
6236
- switch (_l.label) {
6240
+ var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, fileContent, _f, _g, filename_1, fileExtension, mimeType;
6241
+ return __generator(this, function (_h) {
6242
+ switch (_h.label) {
6237
6243
  case 0:
6238
- console.log('!!! makeKnowledgeSourceHandler', knowledgeSource);
6239
6244
  _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
6240
6245
  knowledgeSourceContent = knowledgeSource.knowledgeSourceContent;
6241
6246
  name = knowledgeSource.name;
@@ -6247,7 +6252,7 @@
6247
6252
  url = knowledgeSourceContent;
6248
6253
  return [4 /*yield*/, fetch(url)];
6249
6254
  case 1:
6250
- response_1 = _l.sent();
6255
+ response_1 = _h.sent();
6251
6256
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
6252
6257
  if (tools.fs === undefined || !url.endsWith('.pdf' /* <- TODO: [💵] */)) {
6253
6258
  return [2 /*return*/, {
@@ -6297,17 +6302,19 @@
6297
6302
  filepath = path.join.apply(void 0, __spreadArray(__spreadArray([], __read(nameToSubfolderPath(hash /* <- TODO: [🎎] Maybe add some SHA256 prefix */)), false), ["".concat(basename.substring(0, MAX_FILENAME_LENGTH), ".").concat(mimeTypeToExtension(mimeType))], false));
6298
6303
  return [4 /*yield*/, tools.fs.mkdir(path.dirname(path.join(rootDirname_1, filepath)), { recursive: true })];
6299
6304
  case 2:
6300
- _l.sent();
6301
- _g = (_f = tools.fs).writeFile;
6302
- _h = [path.join(rootDirname_1, filepath)];
6303
- _k = (_j = Buffer).from;
6305
+ _h.sent();
6306
+ _g = (_f = Buffer).from;
6304
6307
  return [4 /*yield*/, response_1.arrayBuffer()];
6305
- case 3: return [4 /*yield*/, _g.apply(_f, _h.concat([_k.apply(_j, [_l.sent()])]))];
6308
+ case 3:
6309
+ fileContent = _g.apply(_f, [_h.sent()]);
6310
+ if (fileContent.length > DEFAULT_MAX_FILE_SIZE /* <- TODO: Allow to pass different value to remote server */) {
6311
+ throw new LimitReachedError("File is too large (".concat(Math.round(fileContent.length / 1024 / 1024), "MB). Maximum allowed size is ").concat(Math.round(DEFAULT_MAX_FILE_SIZE / 1024 / 1024), "MB."));
6312
+ }
6313
+ return [4 /*yield*/, tools.fs.writeFile(path.join(rootDirname_1, filepath), fileContent)];
6306
6314
  case 4:
6307
- _l.sent();
6315
+ _h.sent();
6308
6316
  // TODO: [💵] Check the file security
6309
- // TODO: !!!!!!!! Check the file size (if it is not too big)
6310
- // TODO: !!!!!!!! Delete the file after the scraping is done
6317
+ // TODO: [🧹][🧠] Delete the file after the scraping is done
6311
6318
  return [2 /*return*/, makeKnowledgeSourceHandler({ name: name, knowledgeSourceContent: filepath }, tools, __assign(__assign({}, options), { rootDirname: rootDirname_1 }))];
6312
6319
  case 5:
6313
6320
  if (!isValidFilePath(knowledgeSourceContent)) return [3 /*break*/, 7];
@@ -6324,7 +6331,7 @@
6324
6331
  mimeType = extensionToMimeType(fileExtension || '');
6325
6332
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
6326
6333
  case 6:
6327
- if (!(_l.sent())) {
6334
+ if (!(_h.sent())) {
6328
6335
  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(knowledgeSourceContent), "\n\n Full file path:\n ").concat(block(filename_1), "\n "); }));
6329
6336
  }
6330
6337
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)