@promptbook/node 0.84.0-15 → 0.84.0-17

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.
@@ -4,6 +4,8 @@ import { _AnthropicClaudeMetadataRegistration } from '../llm-providers/anthropic
4
4
  import { _AnthropicClaudeRegistration } from '../llm-providers/anthropic-claude/register-constructor';
5
5
  import { _AzureOpenAiMetadataRegistration } from '../llm-providers/azure-openai/register-configuration';
6
6
  import { _AzureOpenAiRegistration } from '../llm-providers/azure-openai/register-constructor';
7
+ import { _DeepseekMetadataRegistration } from '../llm-providers/deepseek/register-configuration';
8
+ import { _DeepseekRegistration } from '../llm-providers/deepseek/register-constructor';
7
9
  import { _GoogleMetadataRegistration } from '../llm-providers/google/register-configuration';
8
10
  import { _GoogleRegistration } from '../llm-providers/google/register-constructor';
9
11
  import { _OpenAiMetadataRegistration } from '../llm-providers/openai/register-configuration';
@@ -30,6 +32,8 @@ export { _AnthropicClaudeMetadataRegistration };
30
32
  export { _AnthropicClaudeRegistration };
31
33
  export { _AzureOpenAiMetadataRegistration };
32
34
  export { _AzureOpenAiRegistration };
35
+ export { _DeepseekMetadataRegistration };
36
+ export { _DeepseekRegistration };
33
37
  export { _GoogleMetadataRegistration };
34
38
  export { _GoogleRegistration };
35
39
  export { _OpenAiMetadataRegistration };
@@ -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';
@@ -91,6 +92,7 @@ import { countTotalUsage } from '../llm-providers/_common/utils/count-total-usag
91
92
  import { limitTotalUsage } from '../llm-providers/_common/utils/count-total-usage/limitTotalUsage';
92
93
  import { _AnthropicClaudeMetadataRegistration } from '../llm-providers/anthropic-claude/register-configuration';
93
94
  import { _AzureOpenAiMetadataRegistration } from '../llm-providers/azure-openai/register-configuration';
95
+ import { _DeepseekMetadataRegistration } from '../llm-providers/deepseek/register-configuration';
94
96
  import { _GoogleMetadataRegistration } from '../llm-providers/google/register-configuration';
95
97
  import { joinLlmExecutionTools } from '../llm-providers/multiple/joinLlmExecutionTools';
96
98
  import { MultipleLlmExecutionTools } from '../llm-providers/multiple/MultipleLlmExecutionTools';
@@ -143,6 +145,7 @@ export { DEFAULT_BOOK_TITLE };
143
145
  export { DEFAULT_TASK_TITLE };
144
146
  export { DEFAULT_PROMPT_TASK_TITLE };
145
147
  export { DEFAULT_BOOK_OUTPUT_PARAMETER_NAME };
148
+ export { DEFAULT_MAX_FILE_SIZE };
146
149
  export { MAX_FILENAME_LENGTH };
147
150
  export { DEFAULT_INTERMEDIATE_FILES_STRATEGY };
148
151
  export { DEFAULT_MAX_PARALLEL_COUNT };
@@ -220,6 +223,7 @@ export { countTotalUsage };
220
223
  export { limitTotalUsage };
221
224
  export { _AnthropicClaudeMetadataRegistration };
222
225
  export { _AzureOpenAiMetadataRegistration };
226
+ export { _DeepseekMetadataRegistration };
223
227
  export { _GoogleMetadataRegistration };
224
228
  export { joinLlmExecutionTools };
225
229
  export { MultipleLlmExecutionTools };
@@ -0,0 +1,8 @@
1
+ import { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION } from '../version';
2
+ import { createDeepseekExecutionTools } from '../llm-providers/deepseek/createDeepseekExecutionTools';
3
+ import type { DeepseekExecutionToolsOptions } from '../llm-providers/deepseek/DeepseekExecutionToolsOptions';
4
+ import { _DeepseekRegistration } from '../llm-providers/deepseek/register-constructor';
5
+ export { BOOK_LANGUAGE_VERSION, PROMPTBOOK_ENGINE_VERSION };
6
+ export { createDeepseekExecutionTools };
7
+ export type { DeepseekExecutionToolsOptions };
8
+ export { _DeepseekRegistration };
@@ -70,6 +70,7 @@ import type { AnthropicClaudeExecutionToolsOptions } from '../llm-providers/anth
70
70
  import type { AnthropicClaudeExecutionToolsDirectOptions } from '../llm-providers/anthropic-claude/AnthropicClaudeExecutionToolsOptions';
71
71
  import type { AnthropicClaudeExecutionToolsProxiedOptions } from '../llm-providers/anthropic-claude/AnthropicClaudeExecutionToolsOptions';
72
72
  import type { AzureOpenAiExecutionToolsOptions } from '../llm-providers/azure-openai/AzureOpenAiExecutionToolsOptions';
73
+ import type { DeepseekExecutionToolsOptions } from '../llm-providers/deepseek/DeepseekExecutionToolsOptions';
73
74
  import type { GoogleExecutionToolsOptions } from '../llm-providers/google/GoogleExecutionToolsOptions';
74
75
  import type { OpenAiAssistantExecutionToolsOptions } from '../llm-providers/openai/OpenAiAssistantExecutionToolsOptions';
75
76
  import type { OpenAiExecutionToolsOptions } from '../llm-providers/openai/OpenAiExecutionToolsOptions';
@@ -344,6 +345,7 @@ export type { AnthropicClaudeExecutionToolsOptions };
344
345
  export type { AnthropicClaudeExecutionToolsDirectOptions };
345
346
  export type { AnthropicClaudeExecutionToolsProxiedOptions };
346
347
  export type { AzureOpenAiExecutionToolsOptions };
348
+ export type { DeepseekExecutionToolsOptions };
347
349
  export type { GoogleExecutionToolsOptions };
348
350
  export type { OpenAiAssistantExecutionToolsOptions };
349
351
  export type { OpenAiExecutionToolsOptions };
@@ -3,6 +3,8 @@ import { _AnthropicClaudeMetadataRegistration } from '../llm-providers/anthropic
3
3
  import { _AnthropicClaudeRegistration } from '../llm-providers/anthropic-claude/register-constructor';
4
4
  import { _AzureOpenAiMetadataRegistration } from '../llm-providers/azure-openai/register-configuration';
5
5
  import { _AzureOpenAiRegistration } from '../llm-providers/azure-openai/register-constructor';
6
+ import { _DeepseekMetadataRegistration } from '../llm-providers/deepseek/register-configuration';
7
+ import { _DeepseekRegistration } from '../llm-providers/deepseek/register-constructor';
6
8
  import { _GoogleMetadataRegistration } from '../llm-providers/google/register-configuration';
7
9
  import { _GoogleRegistration } from '../llm-providers/google/register-constructor';
8
10
  import { _OpenAiMetadataRegistration } from '../llm-providers/openai/register-configuration';
@@ -29,6 +31,8 @@ export { _AnthropicClaudeMetadataRegistration };
29
31
  export { _AnthropicClaudeRegistration };
30
32
  export { _AzureOpenAiMetadataRegistration };
31
33
  export { _AzureOpenAiRegistration };
34
+ export { _DeepseekMetadataRegistration };
35
+ export { _DeepseekRegistration };
32
36
  export { _GoogleMetadataRegistration };
33
37
  export { _GoogleRegistration };
34
38
  export { _OpenAiMetadataRegistration };
@@ -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
  */
@@ -0,0 +1,9 @@
1
+ import type { createDeepSeek } from '@ai-sdk/deepseek';
2
+ import type { VercelExecutionToolsOptions } from '../vercel/VercelExecutionToolsOptions';
3
+ /**
4
+ * Options for `DeepseekExecutionTools`
5
+ *
6
+ * This combines options for Promptbook, Deepseek and Vercel together
7
+ * @public exported from `@promptbook/deepseek`
8
+ */
9
+ export type DeepseekExecutionToolsOptions = Omit<VercelExecutionToolsOptions, 'title' | 'description' | 'vercelProvider' | 'availableModels'> & Parameters<typeof createDeepSeek>[0];
@@ -0,0 +1,14 @@
1
+ import type { LlmExecutionTools } from '../../execution/LlmExecutionTools';
2
+ import type { DeepseekExecutionToolsOptions } from './DeepseekExecutionToolsOptions';
3
+ /**
4
+ * Execution Tools for calling Deepseek API.
5
+ *
6
+ * @public exported from `@promptbook/deepseek`
7
+ */
8
+ export declare const createDeepseekExecutionTools: ((options: DeepseekExecutionToolsOptions) => LlmExecutionTools) & {
9
+ packageName: string;
10
+ className: string;
11
+ };
12
+ /**
13
+ * TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
14
+ */
@@ -0,0 +1,14 @@
1
+ import type { Registration } from '../../utils/$Register';
2
+ /**
3
+ * Registration of LLM provider metadata
4
+ *
5
+ * Warning: This is not useful for the end user, it is just a side effect of the mechanism that handles all available LLM tools
6
+ *
7
+ * @public exported from `@promptbook/core`
8
+ * @public exported from `@promptbook/wizzard`
9
+ * @public exported from `@promptbook/cli`
10
+ */
11
+ export declare const _DeepseekMetadataRegistration: Registration;
12
+ /**
13
+ * Note: [💞] Ignore a discrepancy between file name and entity name
14
+ */
@@ -0,0 +1,15 @@
1
+ import type { Registration } from '../../utils/$Register';
2
+ /**
3
+ * Registration of LLM provider
4
+ *
5
+ * Warning: This is not useful for the end user, it is just a side effect of the mechanism that handles all available LLM tools
6
+ *
7
+ * @public exported from `@promptbook/deepseek`
8
+ * @public exported from `@promptbook/wizzard`
9
+ * @public exported from `@promptbook/cli`
10
+ */
11
+ export declare const _DeepseekRegistration: Registration;
12
+ /**
13
+ * TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
14
+ * Note: [💞] Ignore a discrepancy between file name and entity name
15
+ */
@@ -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/node",
3
- "version": "0.84.0-15",
3
+ "version": "0.84.0-17",
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",
@@ -33,7 +35,7 @@
33
35
  "anthropic",
34
36
  "LLMOps"
35
37
  ],
36
- "license": "SEE LICENSE IN LICENSE.md",
38
+ "license": "UNLICENSED",
37
39
  "bugs": {
38
40
  "url": "https://github.com/webgptorg/promptbook/issues"
39
41
  },
@@ -42,7 +44,7 @@
42
44
  "module": "./esm/index.es.js",
43
45
  "typings": "./esm/typings/src/_packages/node.index.d.ts",
44
46
  "peerDependencies": {
45
- "@promptbook/core": "0.84.0-15"
47
+ "@promptbook/core": "0.84.0-17"
46
48
  },
47
49
  "dependencies": {
48
50
  "colors": "1.4.0",
package/umd/index.umd.js CHANGED
@@ -45,7 +45,7 @@
45
45
  * @generated
46
46
  * @see https://github.com/webgptorg/promptbook
47
47
  */
48
- var PROMPTBOOK_ENGINE_VERSION = '0.84.0-14';
48
+ var PROMPTBOOK_ENGINE_VERSION = '0.84.0-16';
49
49
  /**
50
50
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
51
51
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -228,6 +228,12 @@
228
228
  * @public exported from `@promptbook/core`
229
229
  */
230
230
  var DEFAULT_BOOK_OUTPUT_PARAMETER_NAME = 'result';
231
+ /**
232
+ * Maximum file size limit
233
+ *
234
+ * @public exported from `@promptbook/core`
235
+ */
236
+ var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
231
237
  // <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
232
238
  /**
233
239
  * The maximum number of iterations for a loops
@@ -5579,11 +5585,10 @@
5579
5585
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
5580
5586
  var _a;
5581
5587
  return __awaiter(this, void 0, void 0, function () {
5582
- 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;
5583
- return __generator(this, function (_l) {
5584
- switch (_l.label) {
5588
+ var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, fileContent, _f, _g, filename_1, fileExtension, mimeType;
5589
+ return __generator(this, function (_h) {
5590
+ switch (_h.label) {
5585
5591
  case 0:
5586
- console.log('!!! makeKnowledgeSourceHandler', knowledgeSource);
5587
5592
  _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
5588
5593
  knowledgeSourceContent = knowledgeSource.knowledgeSourceContent;
5589
5594
  name = knowledgeSource.name;
@@ -5595,7 +5600,7 @@
5595
5600
  url = knowledgeSourceContent;
5596
5601
  return [4 /*yield*/, fetch(url)];
5597
5602
  case 1:
5598
- response_1 = _l.sent();
5603
+ response_1 = _h.sent();
5599
5604
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
5600
5605
  if (tools.fs === undefined || !url.endsWith('.pdf' /* <- TODO: [💵] */)) {
5601
5606
  return [2 /*return*/, {
@@ -5645,17 +5650,19 @@
5645
5650
  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));
5646
5651
  return [4 /*yield*/, tools.fs.mkdir(path.dirname(path.join(rootDirname_1, filepath)), { recursive: true })];
5647
5652
  case 2:
5648
- _l.sent();
5649
- _g = (_f = tools.fs).writeFile;
5650
- _h = [path.join(rootDirname_1, filepath)];
5651
- _k = (_j = Buffer).from;
5653
+ _h.sent();
5654
+ _g = (_f = Buffer).from;
5652
5655
  return [4 /*yield*/, response_1.arrayBuffer()];
5653
- case 3: return [4 /*yield*/, _g.apply(_f, _h.concat([_k.apply(_j, [_l.sent()])]))];
5656
+ case 3:
5657
+ fileContent = _g.apply(_f, [_h.sent()]);
5658
+ if (fileContent.length > DEFAULT_MAX_FILE_SIZE /* <- TODO: Allow to pass different value to remote server */) {
5659
+ 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."));
5660
+ }
5661
+ return [4 /*yield*/, tools.fs.writeFile(path.join(rootDirname_1, filepath), fileContent)];
5654
5662
  case 4:
5655
- _l.sent();
5663
+ _h.sent();
5656
5664
  // TODO: [💵] Check the file security
5657
- // TODO: !!!!!!!! Check the file size (if it is not too big)
5658
- // TODO: !!!!!!!! Delete the file after the scraping is done
5665
+ // TODO: [🧹][🧠] Delete the file after the scraping is done
5659
5666
  return [2 /*return*/, makeKnowledgeSourceHandler({ name: name, knowledgeSourceContent: filepath }, tools, __assign(__assign({}, options), { rootDirname: rootDirname_1 }))];
5660
5667
  case 5:
5661
5668
  if (!isValidFilePath(knowledgeSourceContent)) return [3 /*break*/, 7];
@@ -5672,7 +5679,7 @@
5672
5679
  mimeType = extensionToMimeType(fileExtension || '');
5673
5680
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
5674
5681
  case 6:
5675
- if (!(_l.sent())) {
5682
+ if (!(_h.sent())) {
5676
5683
  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 "); }));
5677
5684
  }
5678
5685
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)