@promptbook/documents 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/documents",
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/documents.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
@@ -26,7 +26,7 @@
26
26
  * @generated
27
27
  * @see https://github.com/webgptorg/promptbook
28
28
  */
29
- var PROMPTBOOK_ENGINE_VERSION = '0.84.0-15';
29
+ var PROMPTBOOK_ENGINE_VERSION = '0.84.0-17';
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
@@ -197,6 +197,12 @@
197
197
  * @public exported from `@promptbook/core`
198
198
  */
199
199
  var DEFAULT_BOOK_TITLE = "\u2728 Untitled Book";
200
+ /**
201
+ * Maximum file size limit
202
+ *
203
+ * @public exported from `@promptbook/core`
204
+ */
205
+ var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
200
206
  // <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
201
207
  /**
202
208
  * The maximum number of iterations for a loops
@@ -3777,11 +3783,10 @@
3777
3783
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
3778
3784
  var _a;
3779
3785
  return __awaiter(this, void 0, void 0, function () {
3780
- 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;
3781
- return __generator(this, function (_l) {
3782
- switch (_l.label) {
3786
+ var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, fileContent, _f, _g, filename_1, fileExtension, mimeType;
3787
+ return __generator(this, function (_h) {
3788
+ switch (_h.label) {
3783
3789
  case 0:
3784
- console.log('!!! makeKnowledgeSourceHandler', knowledgeSource);
3785
3790
  _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
3786
3791
  knowledgeSourceContent = knowledgeSource.knowledgeSourceContent;
3787
3792
  name = knowledgeSource.name;
@@ -3793,7 +3798,7 @@
3793
3798
  url = knowledgeSourceContent;
3794
3799
  return [4 /*yield*/, fetch(url)];
3795
3800
  case 1:
3796
- response_1 = _l.sent();
3801
+ response_1 = _h.sent();
3797
3802
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
3798
3803
  if (tools.fs === undefined || !url.endsWith('.pdf' /* <- TODO: [💵] */)) {
3799
3804
  return [2 /*return*/, {
@@ -3843,17 +3848,19 @@
3843
3848
  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));
3844
3849
  return [4 /*yield*/, tools.fs.mkdir(path.dirname(path.join(rootDirname_1, filepath)), { recursive: true })];
3845
3850
  case 2:
3846
- _l.sent();
3847
- _g = (_f = tools.fs).writeFile;
3848
- _h = [path.join(rootDirname_1, filepath)];
3849
- _k = (_j = Buffer).from;
3851
+ _h.sent();
3852
+ _g = (_f = Buffer).from;
3850
3853
  return [4 /*yield*/, response_1.arrayBuffer()];
3851
- case 3: return [4 /*yield*/, _g.apply(_f, _h.concat([_k.apply(_j, [_l.sent()])]))];
3854
+ case 3:
3855
+ fileContent = _g.apply(_f, [_h.sent()]);
3856
+ if (fileContent.length > DEFAULT_MAX_FILE_SIZE /* <- TODO: Allow to pass different value to remote server */) {
3857
+ 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."));
3858
+ }
3859
+ return [4 /*yield*/, tools.fs.writeFile(path.join(rootDirname_1, filepath), fileContent)];
3852
3860
  case 4:
3853
- _l.sent();
3861
+ _h.sent();
3854
3862
  // TODO: [💵] Check the file security
3855
- // TODO: !!!!!!!! Check the file size (if it is not too big)
3856
- // TODO: !!!!!!!! Delete the file after the scraping is done
3863
+ // TODO: [🧹][🧠] Delete the file after the scraping is done
3857
3864
  return [2 /*return*/, makeKnowledgeSourceHandler({ name: name, knowledgeSourceContent: filepath }, tools, __assign(__assign({}, options), { rootDirname: rootDirname_1 }))];
3858
3865
  case 5:
3859
3866
  if (!isValidFilePath(knowledgeSourceContent)) return [3 /*break*/, 7];
@@ -3870,7 +3877,7 @@
3870
3877
  mimeType = extensionToMimeType(fileExtension || '');
3871
3878
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
3872
3879
  case 6:
3873
- if (!(_l.sent())) {
3880
+ if (!(_h.sent())) {
3874
3881
  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 "); }));
3875
3882
  }
3876
3883
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)