@promptbook/markdown-utils 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/markdown-utils",
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": "CC-BY-4.0",
37
39
  "bugs": {
38
40
  "url": "https://github.com/webgptorg/promptbook/issues"
39
41
  },
package/umd/index.umd.js CHANGED
@@ -25,7 +25,7 @@
25
25
  * @generated
26
26
  * @see https://github.com/webgptorg/promptbook
27
27
  */
28
- var PROMPTBOOK_ENGINE_VERSION = '0.84.0-14';
28
+ var PROMPTBOOK_ENGINE_VERSION = '0.84.0-16';
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
@@ -778,6 +778,12 @@
778
778
  * @public exported from `@promptbook/core`
779
779
  */
780
780
  var DEFAULT_BOOK_TITLE = "\u2728 Untitled Book";
781
+ /**
782
+ * Maximum file size limit
783
+ *
784
+ * @public exported from `@promptbook/core`
785
+ */
786
+ var DEFAULT_MAX_FILE_SIZE = 100 * 1024 * 1024; // 100MB
781
787
  // <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
782
788
  /**
783
789
  * The maximum number of iterations for a loops
@@ -3702,11 +3708,10 @@
3702
3708
  function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
3703
3709
  var _a;
3704
3710
  return __awaiter(this, void 0, void 0, function () {
3705
- 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;
3706
- return __generator(this, function (_l) {
3707
- switch (_l.label) {
3711
+ var _b, fetch, knowledgeSourceContent, name, _c, _d, rootDirname, url, response_1, mimeType, basename, hash, rootDirname_1, filepath, fileContent, _f, _g, filename_1, fileExtension, mimeType;
3712
+ return __generator(this, function (_h) {
3713
+ switch (_h.label) {
3708
3714
  case 0:
3709
- console.log('!!! makeKnowledgeSourceHandler', knowledgeSource);
3710
3715
  _b = tools.fetch, fetch = _b === void 0 ? scraperFetch : _b;
3711
3716
  knowledgeSourceContent = knowledgeSource.knowledgeSourceContent;
3712
3717
  name = knowledgeSource.name;
@@ -3718,7 +3723,7 @@
3718
3723
  url = knowledgeSourceContent;
3719
3724
  return [4 /*yield*/, fetch(url)];
3720
3725
  case 1:
3721
- response_1 = _l.sent();
3726
+ response_1 = _h.sent();
3722
3727
  mimeType = ((_a = response_1.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.split(';')[0]) || 'text/html';
3723
3728
  if (tools.fs === undefined || !url.endsWith('.pdf' /* <- TODO: [💵] */)) {
3724
3729
  return [2 /*return*/, {
@@ -3768,17 +3773,19 @@
3768
3773
  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));
3769
3774
  return [4 /*yield*/, tools.fs.mkdir(path.dirname(path.join(rootDirname_1, filepath)), { recursive: true })];
3770
3775
  case 2:
3771
- _l.sent();
3772
- _g = (_f = tools.fs).writeFile;
3773
- _h = [path.join(rootDirname_1, filepath)];
3774
- _k = (_j = Buffer).from;
3776
+ _h.sent();
3777
+ _g = (_f = Buffer).from;
3775
3778
  return [4 /*yield*/, response_1.arrayBuffer()];
3776
- case 3: return [4 /*yield*/, _g.apply(_f, _h.concat([_k.apply(_j, [_l.sent()])]))];
3779
+ case 3:
3780
+ fileContent = _g.apply(_f, [_h.sent()]);
3781
+ if (fileContent.length > DEFAULT_MAX_FILE_SIZE /* <- TODO: Allow to pass different value to remote server */) {
3782
+ 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."));
3783
+ }
3784
+ return [4 /*yield*/, tools.fs.writeFile(path.join(rootDirname_1, filepath), fileContent)];
3777
3785
  case 4:
3778
- _l.sent();
3786
+ _h.sent();
3779
3787
  // TODO: [💵] Check the file security
3780
- // TODO: !!!!!!!! Check the file size (if it is not too big)
3781
- // TODO: !!!!!!!! Delete the file after the scraping is done
3788
+ // TODO: [🧹][🧠] Delete the file after the scraping is done
3782
3789
  return [2 /*return*/, makeKnowledgeSourceHandler({ name: name, knowledgeSourceContent: filepath }, tools, __assign(__assign({}, options), { rootDirname: rootDirname_1 }))];
3783
3790
  case 5:
3784
3791
  if (!isValidFilePath(knowledgeSourceContent)) return [3 /*break*/, 7];
@@ -3795,7 +3802,7 @@
3795
3802
  mimeType = extensionToMimeType(fileExtension || '');
3796
3803
  return [4 /*yield*/, isFileExisting(filename_1, tools.fs)];
3797
3804
  case 6:
3798
- if (!(_l.sent())) {
3805
+ if (!(_h.sent())) {
3799
3806
  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 "); }));
3800
3807
  }
3801
3808
  // TODO: [🧠][😿] Test security file - file is scoped to the project (BUT maybe do this in `filesystemTools`)