@promptbook/core 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/core",
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
  },
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
@@ -686,6 +686,12 @@
686
686
  * @public exported from `@promptbook/core`
687
687
  */
688
688
  var DEFAULT_BOOK_OUTPUT_PARAMETER_NAME = 'result';
689
+ /**
690
+ * Maximum file size limit
691
+ *
692
+ * @public exported from `@promptbook/core`
693
+ */
694
+ var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
689
695
  // <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
690
696
  /**
691
697
  * The maximum number of iterations for a loops
@@ -5921,11 +5927,10 @@
5921
5927
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
5922
5928
  var _a;
5923
5929
  return __awaiter(this, void 0, void 0, function () {
5924
- 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;
5925
- return __generator(this, function (_l) {
5926
- switch (_l.label) {
5930
+ var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, fileContent, _f, _g, filename_1, fileExtension, mimeType;
5931
+ return __generator(this, function (_h) {
5932
+ switch (_h.label) {
5927
5933
  case 0:
5928
- console.log('!!! makeKnowledgeSourceHandler', knowledgeSource);
5929
5934
  _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
5930
5935
  knowledgeSourceContent = knowledgeSource.knowledgeSourceContent;
5931
5936
  name = knowledgeSource.name;
@@ -5937,7 +5942,7 @@
5937
5942
  url = knowledgeSourceContent;
5938
5943
  return [4 /*yield*/, fetch(url)];
5939
5944
  case 1:
5940
- response_1 = _l.sent();
5945
+ response_1 = _h.sent();
5941
5946
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
5942
5947
  if (tools.fs === undefined || !url.endsWith('.pdf' /* <- TODO: [💵] */)) {
5943
5948
  return [2 /*return*/, {
@@ -5987,17 +5992,19 @@
5987
5992
  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));
5988
5993
  return [4 /*yield*/, tools.fs.mkdir(path.dirname(path.join(rootDirname_1, filepath)), { recursive: true })];
5989
5994
  case 2:
5990
- _l.sent();
5991
- _g = (_f = tools.fs).writeFile;
5992
- _h = [path.join(rootDirname_1, filepath)];
5993
- _k = (_j = Buffer).from;
5995
+ _h.sent();
5996
+ _g = (_f = Buffer).from;
5994
5997
  return [4 /*yield*/, response_1.arrayBuffer()];
5995
- case 3: return [4 /*yield*/, _g.apply(_f, _h.concat([_k.apply(_j, [_l.sent()])]))];
5998
+ case 3:
5999
+ fileContent = _g.apply(_f, [_h.sent()]);
6000
+ if (fileContent.length > DEFAULT_MAX_FILE_SIZE /* <- TODO: Allow to pass different value to remote server */) {
6001
+ 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."));
6002
+ }
6003
+ return [4 /*yield*/, tools.fs.writeFile(path.join(rootDirname_1, filepath), fileContent)];
5996
6004
  case 4:
5997
- _l.sent();
6005
+ _h.sent();
5998
6006
  // TODO: [💵] Check the file security
5999
- // TODO: !!!!!!!! Check the file size (if it is not too big)
6000
- // TODO: !!!!!!!! Delete the file after the scraping is done
6007
+ // TODO: [🧹][🧠] Delete the file after the scraping is done
6001
6008
  return [2 /*return*/, makeKnowledgeSourceHandler({ name: name, knowledgeSourceContent: filepath }, tools, __assign(__assign({}, options), { rootDirname: rootDirname_1 }))];
6002
6009
  case 5:
6003
6010
  if (!isValidFilePath(knowledgeSourceContent)) return [3 /*break*/, 7];
@@ -6014,7 +6021,7 @@
6014
6021
  mimeType = extensionToMimeType(fileExtension || '');
6015
6022
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
6016
6023
  case 6:
6017
- if (!(_l.sent())) {
6024
+ if (!(_h.sent())) {
6018
6025
  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 "); }));
6019
6026
  }
6020
6027
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)
@@ -11656,6 +11663,7 @@
11656
11663
  exports.DEFAULT_INTERMEDIATE_FILES_STRATEGY = DEFAULT_INTERMEDIATE_FILES_STRATEGY;
11657
11664
  exports.DEFAULT_IS_AUTO_INSTALLED = DEFAULT_IS_AUTO_INSTALLED;
11658
11665
  exports.DEFAULT_MAX_EXECUTION_ATTEMPTS = DEFAULT_MAX_EXECUTION_ATTEMPTS;
11666
+ exports.DEFAULT_MAX_FILE_SIZE = DEFAULT_MAX_FILE_SIZE;
11659
11667
  exports.DEFAULT_MAX_KNOWLEDGE_SOURCES_SCRAPING_DEPTH = DEFAULT_MAX_KNOWLEDGE_SOURCES_SCRAPING_DEPTH;
11660
11668
  exports.DEFAULT_MAX_KNOWLEDGE_SOURCES_SCRAPING_TOTAL = DEFAULT_MAX_KNOWLEDGE_SOURCES_SCRAPING_TOTAL;
11661
11669
  exports.DEFAULT_MAX_PARALLEL_COUNT = DEFAULT_MAX_PARALLEL_COUNT;