@promptbook/core 0.69.0-14 → 0.69.0-16
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.
- package/README.md +4 -0
- package/esm/index.es.js +40 -44
- package/esm/index.es.js.map +1 -1
- package/esm/typings/promptbook-collection/index.d.ts +0 -3
- package/esm/typings/src/cli/cli-commands/make.d.ts +1 -1
- package/esm/typings/src/collection/constructors/createCollectionFromUrl.d.ts +1 -1
- package/esm/typings/src/commands/FOREACH/ForeachCommand.d.ts +1 -1
- package/esm/typings/src/commands/FOREACH/foreachCommandParser.d.ts +0 -1
- package/esm/typings/src/config.d.ts +2 -2
- package/esm/typings/src/conversion/pipelineStringToJsonSync.d.ts +1 -1
- package/esm/typings/src/conversion/validation/validatePipeline.d.ts +6 -6
- package/esm/typings/src/knowledge/prepare-knowledge/markdown/prepareKnowledgeFromMarkdown.d.ts +1 -1
- package/esm/typings/src/knowledge/prepare-knowledge/pdf/prepareKnowledgeFromPdf.d.ts +1 -1
- package/esm/typings/src/llm-providers/_common/utils/cache/CacheItem.d.ts +1 -1
- package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/anthropic-claude/createAnthropicClaudeExecutionTools.d.ts +2 -2
- package/esm/typings/src/llm-providers/anthropic-claude/playground/playground.d.ts +2 -2
- package/esm/typings/src/llm-providers/openai/playground/playground.d.ts +1 -1
- package/esm/typings/src/personas/preparePersona.d.ts +1 -1
- package/esm/typings/src/prepare/isPipelinePrepared.d.ts +1 -1
- package/esm/typings/src/prepare/prepareTemplates.d.ts +1 -1
- package/esm/typings/src/types/PipelineJson/PipelineJson.d.ts +1 -1
- package/esm/typings/src/types/typeAliases.d.ts +1 -1
- package/esm/typings/src/utils/serialization/checkSerializableAsJson.d.ts +1 -1
- package/esm/typings/src/utils/serialization/isSerializableAsJson.d.ts +1 -1
- package/package.json +1 -1
- package/umd/index.umd.js +40 -44
- package/umd/index.umd.js.map +1 -1
- /package/esm/typings/src/{personas/preparePersona.test.d.ts → collection/constructors/createCollectionFromDirectory.test.d.ts} +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
declare const _default: ({
|
|
2
2
|
title: string;
|
|
3
3
|
pipelineUrl: string;
|
|
4
|
-
promptbookVersion: string;
|
|
5
4
|
parameters: {
|
|
6
5
|
name: string;
|
|
7
6
|
description: string;
|
|
@@ -24,7 +23,6 @@ declare const _default: ({
|
|
|
24
23
|
} | {
|
|
25
24
|
title: string;
|
|
26
25
|
pipelineUrl: string;
|
|
27
|
-
promptbookVersion: string;
|
|
28
26
|
parameters: {
|
|
29
27
|
name: string;
|
|
30
28
|
description: string;
|
|
@@ -53,7 +51,6 @@ declare const _default: ({
|
|
|
53
51
|
} | {
|
|
54
52
|
title: string;
|
|
55
53
|
pipelineUrl: string;
|
|
56
|
-
promptbookVersion: string;
|
|
57
54
|
parameters: {
|
|
58
55
|
name: string;
|
|
59
56
|
description: string;
|
|
@@ -6,7 +6,7 @@ import type { Command as Program } from 'commander';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function initializeMakeCommand(program: Program): void;
|
|
8
8
|
/**
|
|
9
|
-
* TODO: [🥃] !!! Allow `ptbk make` without configuring any llm tools
|
|
9
|
+
* TODO: [🥃][main] !!! Allow `ptbk make` without configuring any llm tools
|
|
10
10
|
* TODO: Maybe remove this command - "about" command should be enough?
|
|
11
11
|
* TODO: [0] DRY Javascript and typescript - Maybe make ONLY typescript and for javascript just remove types
|
|
12
12
|
* Note: [🟡] This code should never be published outside of `@promptbook/cli`
|
|
@@ -25,5 +25,5 @@ type CreatePipelineCollectionFromUrlyOptions = {
|
|
|
25
25
|
export declare function createCollectionFromUrl(url: string_url | URL, options: CreatePipelineCollectionFromUrlyOptions): Promise<PipelineCollection>;
|
|
26
26
|
export {};
|
|
27
27
|
/**
|
|
28
|
-
* TODO: !!!! [🧠] Library precompilation and do not mix markdown and json promptbooks
|
|
28
|
+
* TODO:[main] !!!! [🧠] Library precompilation and do not mix markdown and json promptbooks
|
|
29
29
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ForeachJson } from './ForeachJson';
|
|
2
2
|
/**
|
|
3
|
-
* Parsed FOREACH command
|
|
3
|
+
* Parsed FOREACH command which is used to iterate over a table of values
|
|
4
4
|
*
|
|
5
5
|
* @see ./foreachCommandParser.ts for more details
|
|
6
6
|
* @private within the commands folder
|
|
@@ -10,7 +10,6 @@ import type { ForeachCommand } from './ForeachCommand';
|
|
|
10
10
|
*/
|
|
11
11
|
export declare const foreachCommandParser: PipelineTemplateCommandParser<ForeachCommand>;
|
|
12
12
|
/**
|
|
13
|
-
* TODO: !!!!!! Remove console logs
|
|
14
13
|
* TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
|
|
15
14
|
* TODO: [🍭] !!!!!! Make .ptbk.md file with examples of the FOREACH command and also with wrong parsing and logic
|
|
16
15
|
*/
|
|
@@ -69,14 +69,14 @@ export declare const MAX_EXECUTION_ATTEMPTS = 3;
|
|
|
69
69
|
export declare const MAX_FILENAME_LENGTH = 30;
|
|
70
70
|
/**
|
|
71
71
|
* @@@
|
|
72
|
-
* TODO: [🐝] !!! Use
|
|
72
|
+
* TODO: [🐝][main] !!! Use
|
|
73
73
|
*
|
|
74
74
|
* @public exported from `@promptbook/core`
|
|
75
75
|
*/
|
|
76
76
|
export declare const MAX_KNOWLEDGE_SOURCES_SCRAPING_DEPTH = 3;
|
|
77
77
|
/**
|
|
78
78
|
* @@@
|
|
79
|
-
* TODO: [🐝] !!! Use
|
|
79
|
+
* TODO: [🐝][main] !!! Use
|
|
80
80
|
*
|
|
81
81
|
* @public exported from `@promptbook/core`
|
|
82
82
|
*/
|
|
@@ -18,7 +18,7 @@ import type { PipelineString } from '../types/PipelineString';
|
|
|
18
18
|
*/
|
|
19
19
|
export declare function pipelineStringToJsonSync(pipelineString: PipelineString): PipelineJson;
|
|
20
20
|
/**
|
|
21
|
-
* TODO: !!!! Warn if used only sync version
|
|
21
|
+
* TODO:[main] !!!! Warn if used only sync version
|
|
22
22
|
* TODO: [🚞] Report here line/column of error
|
|
23
23
|
* TODO: Use spaceTrim more effectively
|
|
24
24
|
* TODO: [🧠] Parameter flags - isInput, isOutput, isInternal
|
|
@@ -20,7 +20,7 @@ export declare function validatePipeline(pipeline: PipelineJson): PipelineJson;
|
|
|
20
20
|
*/
|
|
21
21
|
export declare function validatePipelineCore(pipeline: PipelineJson): void;
|
|
22
22
|
/**
|
|
23
|
-
* TODO:
|
|
23
|
+
* TODO: !!!!! [🧞♀️] Do not allow joker + foreach
|
|
24
24
|
* TODO: [🧠] Work with promptbookVersion
|
|
25
25
|
* TODO: Use here some json-schema, Zod or something similar and change it to:
|
|
26
26
|
* > /**
|
|
@@ -32,11 +32,11 @@ export declare function validatePipelineCore(pipeline: PipelineJson): void;
|
|
|
32
32
|
* > ex port function validatePipeline(promptbook: really_unknown): asserts promptbook is PipelineJson {
|
|
33
33
|
*/
|
|
34
34
|
/**
|
|
35
|
-
* TODO: [🐣] !!!! Validate that all samples match expectations
|
|
36
|
-
* TODO: [🐣][🐝] !!!! Validate that knowledge is valid (non-void)
|
|
37
|
-
* TODO: [🐣] !!!! Validate that persona can be used only with CHAT variant
|
|
38
|
-
* TODO: [🐣] !!!! Validate that parameter with reserved name not used RESERVED_PARAMETER_NAMES
|
|
39
|
-
* TODO: [🐣] !!!! Validate that reserved parameter is not used as joker
|
|
35
|
+
* TODO: [🐣][main] !!!! Validate that all samples match expectations
|
|
36
|
+
* TODO: [🐣][🐝][main] !!!! Validate that knowledge is valid (non-void)
|
|
37
|
+
* TODO: [🐣][main] !!!! Validate that persona can be used only with CHAT variant
|
|
38
|
+
* TODO: [🐣][main] !!!! Validate that parameter with reserved name not used RESERVED_PARAMETER_NAMES
|
|
39
|
+
* TODO: [🐣][main] !!!! Validate that reserved parameter is not used as joker
|
|
40
40
|
* TODO: [🧠] Validation not only logic itself but imports around - files and websites and rerefenced pipelines exists
|
|
41
41
|
* TODO: [🛠] Actions, instruments (and maybe knowledge) => Functions and tools
|
|
42
42
|
*/
|
package/esm/typings/src/knowledge/prepare-knowledge/markdown/prepareKnowledgeFromMarkdown.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { string_markdown } from '../../../types/typeAliases';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function prepareKnowledgeFromMarkdown(knowledgeContent: string_markdown, options: PrepareOptions): Promise<Array<Omit<KnowledgePiecePreparedJson, 'sources' | 'preparationIds'>>>;
|
|
10
10
|
/**
|
|
11
|
-
* TODO: [🐝][🔼] !!! Export via `@promptbook/markdown`
|
|
11
|
+
* TODO: [🐝][🔼][main] !!! Export via `@promptbook/markdown`
|
|
12
12
|
* TODO: [🪂] Do it in parallel 11:11
|
|
13
13
|
* Note: No need to aggregate usage here, it is done by intercepting the llmTools
|
|
14
14
|
*/
|
|
@@ -8,7 +8,7 @@ import type { string_base64 } from '../../../types/typeAliases';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function prepareKnowledgeFromPdf(content: string_base64, options: PrepareOptions): Promise<Array<Omit<KnowledgePiecePreparedJson, 'sources' | 'preparationIds'>>>;
|
|
10
10
|
/**
|
|
11
|
-
* TODO: [🐝][🔼] !!! Export via `@promptbook/pdf`
|
|
11
|
+
* TODO: [🐝][🔼][main] !!! Export via `@promptbook/pdf`
|
|
12
12
|
* TODO: [🧺] In future, content can be alse File or Blob BUT for now for wider compatibility its only base64
|
|
13
13
|
* @see https://stackoverflow.com/questions/14653349/node-js-cant-create-blobs
|
|
14
14
|
* TODO: [🪂] Do it in parallel
|
|
@@ -16,7 +16,7 @@ export declare const ANTHROPIC_CLAUDE_MODELS: Array<AvailableModel & {
|
|
|
16
16
|
}>;
|
|
17
17
|
/**
|
|
18
18
|
* Note: [🤖] Add models of new variant
|
|
19
|
-
* TODO: [🧠] !!! Add embedding models OR Anthropic has only chat+completion models?
|
|
19
|
+
* TODO: [🧠][main] !!! Add embedding models OR Anthropic has only chat+completion models?
|
|
20
20
|
* TODO: [🧠] Some mechanism to propagate unsureness
|
|
21
21
|
* TODO: [🧠][👮♀️] Put here more info like description, isVision, trainingDateCutoff, languages, strengths ( Top-level performance, intelligence, fluency, and understanding), contextWindow,...
|
|
22
22
|
* TODO: [🎰] Some mechanism to auto-update available models
|
package/esm/typings/src/llm-providers/anthropic-claude/createAnthropicClaudeExecutionTools.d.ts
CHANGED
|
@@ -11,8 +11,8 @@ export declare const createAnthropicClaudeExecutionTools: ((options: AnthropicCl
|
|
|
11
11
|
className: string;
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
|
-
* TODO: [🧠] !!!! Make anonymous this with all LLM providers
|
|
15
|
-
* TODO: [🧠][🧱] !!!! Maybe change all `new AnthropicClaudeExecutionTools` -> `createAnthropicClaudeExecutionTools` in manual
|
|
14
|
+
* TODO: [🧠][main] !!!! Make anonymous this with all LLM providers
|
|
15
|
+
* TODO: [🧠][🧱][main] !!!! Maybe change all `new AnthropicClaudeExecutionTools` -> `createAnthropicClaudeExecutionTools` in manual
|
|
16
16
|
* TODO: [🧠] Maybe auto-detect usage in browser and determine default value of `isProxied`
|
|
17
17
|
* TODO: [🦺] Is there some way how to put `packageName` and `className` on top and function definition on bottom?
|
|
18
18
|
* TODO: [🎶] Naming "constructor" vs "creator" vs "factory"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env ts-node
|
|
2
2
|
export {};
|
|
3
3
|
/**
|
|
4
|
-
* TODO: !!! Playground with WebGPT / Promptbook.studio anonymous server
|
|
5
|
-
* TODO: !!! Test here that `systemMessage`, `temperature` and `seed` are working correctly
|
|
4
|
+
* TODO:[main] !!! Playground with WebGPT / Promptbook.studio anonymous server
|
|
5
|
+
* TODO:[main] !!! Test here that `systemMessage`, `temperature` and `seed` are working correctly
|
|
6
6
|
*/
|
|
@@ -9,7 +9,7 @@ import type { string_persona_description } from '../types/typeAliases';
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function preparePersona(personaDescription: string_persona_description, options: PrepareOptions): Promise<PersonaPreparedJson['modelRequirements']>;
|
|
11
11
|
/**
|
|
12
|
-
* TODO: [🔃] !!!!! If the persona was prepared with different version or different set of models, prepare it once again
|
|
12
|
+
* TODO: [🔃][main] !!!!! If the persona was prepared with different version or different set of models, prepare it once again
|
|
13
13
|
* TODO: [🏢] !! Check validity of `modelName` in pipeline
|
|
14
14
|
* TODO: [🏢] !! Check validity of `systemMessage` in pipeline
|
|
15
15
|
* TODO: [🏢] !! Check validity of `temperature` in pipeline
|
|
@@ -6,7 +6,7 @@ import type { PipelineJson } from '../types/PipelineJson/PipelineJson';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function isPipelinePrepared(pipeline: PipelineJson): boolean;
|
|
8
8
|
/**
|
|
9
|
-
* TODO: [🔃] !!!!! If the pipeline was prepared with different version or different set of models, prepare it once again
|
|
9
|
+
* TODO: [🔃][main] !!!!! If the pipeline was prepared with different version or different set of models, prepare it once again
|
|
10
10
|
* TODO: [🐠] Maybe base this on `makeValidator`
|
|
11
11
|
* TODO: [🧊] Pipeline can be partially prepared, this should return true ONLY if fully prepared
|
|
12
12
|
* TODO: [🧿] Maybe do same process with same granularity and subfinctions as `preparePipeline`
|
|
@@ -23,7 +23,7 @@ export {};
|
|
|
23
23
|
/**
|
|
24
24
|
* TODO: [🧠] Add context to each template (if missing)
|
|
25
25
|
* TODO: [🧠] What is better name `prepareTemplate` or `prepareTemplateAndParameters`
|
|
26
|
-
* TODO: [♨] !!! Prepare index the samples and maybe templates
|
|
26
|
+
* TODO: [♨][main] !!! Prepare index the samples and maybe templates
|
|
27
27
|
* TODO: Write tests for `preparePipeline`
|
|
28
28
|
* TODO: [🏏] Leverage the batch API and build queues @see https://platform.openai.com/docs/guides/batch
|
|
29
29
|
* TODO: [🧊] In future one preparation can take data from previous preparation and save tokens and time
|
|
@@ -42,7 +42,7 @@ export type PipelineJson = {
|
|
|
42
42
|
/**
|
|
43
43
|
* Version of the .ptbk.json file
|
|
44
44
|
*/
|
|
45
|
-
readonly promptbookVersion
|
|
45
|
+
readonly promptbookVersion?: string_semantic_version;
|
|
46
46
|
/**
|
|
47
47
|
* Description of the promptbook
|
|
48
48
|
* It can use multiple paragraphs of simple markdown formatting like **bold**, *italic*, [link](https://example.com), ... BUT not code blocks and structure
|
|
@@ -592,7 +592,7 @@ export type number_megabytes = number_positive;
|
|
|
592
592
|
export type number_gigabytes = number_positive;
|
|
593
593
|
export type number_terabytes = number_positive;
|
|
594
594
|
/**.
|
|
595
|
-
* TODO: !!! Change "For example" to @example
|
|
595
|
+
* TODO:[main] !!! Change "For example" to @example
|
|
596
596
|
* TODO: !! Change to branded types
|
|
597
597
|
* TODO: Delete type aliases that are not exported or used internally
|
|
598
598
|
*/
|
|
@@ -22,6 +22,6 @@ import type { string_name } from '../../types/typeAliases';
|
|
|
22
22
|
export declare function checkSerializableAsJson(name: string_name, value: unknown): void;
|
|
23
23
|
/**
|
|
24
24
|
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
25
|
-
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
25
|
+
* TODO: [🧠][main] !!! In-memory cache of same values to prevent multiple checks
|
|
26
26
|
* Note: [🐠] This is how `checkSerializableAsJson` + `isSerializableAsJson` together can just retun true/false or rich error message
|
|
27
27
|
*/
|
|
@@ -19,6 +19,6 @@
|
|
|
19
19
|
*/
|
|
20
20
|
export declare function isSerializableAsJson(value: unknown): boolean;
|
|
21
21
|
/**
|
|
22
|
-
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
22
|
+
* TODO: [🧠][main] !!! In-memory cache of same values to prevent multiple checks
|
|
23
23
|
* TODO: [🧠][💺] Can be done this on type-level?
|
|
24
24
|
*/
|
package/package.json
CHANGED
package/umd/index.umd.js
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
/**
|
|
17
17
|
* The version of the Promptbook library
|
|
18
18
|
*/
|
|
19
|
-
var PROMPTBOOK_VERSION = '0.69.0-
|
|
20
|
-
// TODO: !!!! List here all the versions and annotate + put into script
|
|
19
|
+
var PROMPTBOOK_VERSION = '0.69.0-15';
|
|
20
|
+
// TODO:[main] !!!! List here all the versions and annotate + put into script
|
|
21
21
|
|
|
22
22
|
/*! *****************************************************************************
|
|
23
23
|
Copyright (c) Microsoft Corporation.
|
|
@@ -229,7 +229,7 @@
|
|
|
229
229
|
commands.push("PIPELINE URL ".concat(pipelineUrl));
|
|
230
230
|
}
|
|
231
231
|
commands.push("PROMPTBOOK VERSION ".concat(promptbookVersion));
|
|
232
|
-
// TODO: !!! This increase size of the bundle and is probbably not necessary
|
|
232
|
+
// TODO:[main] !!! This increase size of the bundle and is probbably not necessary
|
|
233
233
|
pipelineString = prettifyMarkdown(pipelineString);
|
|
234
234
|
try {
|
|
235
235
|
for (var _g = __values(parameters.filter(function (_a) {
|
|
@@ -377,12 +377,12 @@
|
|
|
377
377
|
pipelineString += '```' + contentLanguage;
|
|
378
378
|
pipelineString += '\n';
|
|
379
379
|
pipelineString += spaceTrim__default["default"](content);
|
|
380
|
-
// <- TODO: !!! Escape
|
|
380
|
+
// <- TODO:[main] !!! Escape
|
|
381
381
|
// <- TODO: [🧠] Some clear strategy how to spaceTrim the blocks
|
|
382
382
|
pipelineString += '\n';
|
|
383
383
|
pipelineString += '```';
|
|
384
384
|
pipelineString += '\n\n';
|
|
385
|
-
pipelineString += "`-> {".concat(resultingParameterName, "}`"); // <- TODO: !!! If the parameter here has description, add it and use templateParameterJsonToString
|
|
385
|
+
pipelineString += "`-> {".concat(resultingParameterName, "}`"); // <- TODO:[main] !!! If the parameter here has description, add it and use templateParameterJsonToString
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
388
|
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
|
@@ -602,7 +602,7 @@
|
|
|
602
602
|
}
|
|
603
603
|
/**
|
|
604
604
|
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
605
|
-
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
605
|
+
* TODO: [🧠][main] !!! In-memory cache of same values to prevent multiple checks
|
|
606
606
|
* Note: [🐠] This is how `checkSerializableAsJson` + `isSerializableAsJson` together can just retun true/false or rich error message
|
|
607
607
|
*/
|
|
608
608
|
|
|
@@ -673,14 +673,14 @@
|
|
|
673
673
|
var MAX_FILENAME_LENGTH = 30;
|
|
674
674
|
/**
|
|
675
675
|
* @@@
|
|
676
|
-
* TODO: [🐝] !!! Use
|
|
676
|
+
* TODO: [🐝][main] !!! Use
|
|
677
677
|
*
|
|
678
678
|
* @public exported from `@promptbook/core`
|
|
679
679
|
*/
|
|
680
680
|
var MAX_KNOWLEDGE_SOURCES_SCRAPING_DEPTH = 3;
|
|
681
681
|
/**
|
|
682
682
|
* @@@
|
|
683
|
-
* TODO: [🐝] !!! Use
|
|
683
|
+
* TODO: [🐝][main] !!! Use
|
|
684
684
|
*
|
|
685
685
|
* @public exported from `@promptbook/core`
|
|
686
686
|
*/
|
|
@@ -856,7 +856,7 @@
|
|
|
856
856
|
if ( /* version === '1.0.0' || */version === '2.0.0' || version === '3.0.0') {
|
|
857
857
|
return false;
|
|
858
858
|
}
|
|
859
|
-
// <- TODO: !!! Check isValidPromptbookVersion against PROMPTBOOK_VERSIONS
|
|
859
|
+
// <- TODO:[main] !!! Check isValidPromptbookVersion against PROMPTBOOK_VERSIONS
|
|
860
860
|
return true;
|
|
861
861
|
}
|
|
862
862
|
|
|
@@ -1025,7 +1025,7 @@
|
|
|
1025
1025
|
// <- Note: [🚲]
|
|
1026
1026
|
throw new PipelineLogicError(spaceTrim.spaceTrim(function (block) { return "\n Invalid promptbook URL \"".concat(pipeline.pipelineUrl, "\"\n\n ").concat(block(pipelineIdentification), "\n "); }));
|
|
1027
1027
|
}
|
|
1028
|
-
if (!isValidPromptbookVersion(pipeline.promptbookVersion)) {
|
|
1028
|
+
if (pipeline.promptbookVersion !== undefined && !isValidPromptbookVersion(pipeline.promptbookVersion)) {
|
|
1029
1029
|
// <- Note: [🚲]
|
|
1030
1030
|
throw new PipelineLogicError(spaceTrim.spaceTrim(function (block) { return "\n Invalid Promptbook Version \"".concat(pipeline.promptbookVersion, "\"\n\n ").concat(block(pipelineIdentification), "\n "); }));
|
|
1031
1031
|
}
|
|
@@ -1208,7 +1208,7 @@
|
|
|
1208
1208
|
}
|
|
1209
1209
|
}
|
|
1210
1210
|
/**
|
|
1211
|
-
* TODO:
|
|
1211
|
+
* TODO: !!!!! [🧞♀️] Do not allow joker + foreach
|
|
1212
1212
|
* TODO: [🧠] Work with promptbookVersion
|
|
1213
1213
|
* TODO: Use here some json-schema, Zod or something similar and change it to:
|
|
1214
1214
|
* > /**
|
|
@@ -1220,11 +1220,11 @@
|
|
|
1220
1220
|
* > ex port function validatePipeline(promptbook: really_unknown): asserts promptbook is PipelineJson {
|
|
1221
1221
|
*/
|
|
1222
1222
|
/**
|
|
1223
|
-
* TODO: [🐣] !!!! Validate that all samples match expectations
|
|
1224
|
-
* TODO: [🐣][🐝] !!!! Validate that knowledge is valid (non-void)
|
|
1225
|
-
* TODO: [🐣] !!!! Validate that persona can be used only with CHAT variant
|
|
1226
|
-
* TODO: [🐣] !!!! Validate that parameter with reserved name not used RESERVED_PARAMETER_NAMES
|
|
1227
|
-
* TODO: [🐣] !!!! Validate that reserved parameter is not used as joker
|
|
1223
|
+
* TODO: [🐣][main] !!!! Validate that all samples match expectations
|
|
1224
|
+
* TODO: [🐣][🐝][main] !!!! Validate that knowledge is valid (non-void)
|
|
1225
|
+
* TODO: [🐣][main] !!!! Validate that persona can be used only with CHAT variant
|
|
1226
|
+
* TODO: [🐣][main] !!!! Validate that parameter with reserved name not used RESERVED_PARAMETER_NAMES
|
|
1227
|
+
* TODO: [🐣][main] !!!! Validate that reserved parameter is not used as joker
|
|
1228
1228
|
* TODO: [🧠] Validation not only logic itself but imports around - files and websites and rerefenced pipelines exists
|
|
1229
1229
|
* TODO: [🛠] Actions, instruments (and maybe knowledge) => Functions and tools
|
|
1230
1230
|
*/
|
|
@@ -1538,7 +1538,7 @@
|
|
|
1538
1538
|
});
|
|
1539
1539
|
}
|
|
1540
1540
|
/**
|
|
1541
|
-
* TODO: !!!! [🧠] Library precompilation and do not mix markdown and json promptbooks
|
|
1541
|
+
* TODO:[main] !!!! [🧠] Library precompilation and do not mix markdown and json promptbooks
|
|
1542
1542
|
*/
|
|
1543
1543
|
|
|
1544
1544
|
/**
|
|
@@ -1835,7 +1835,7 @@
|
|
|
1835
1835
|
});
|
|
1836
1836
|
}
|
|
1837
1837
|
|
|
1838
|
-
var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.ptbk.md",
|
|
1838
|
+
var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.ptbk.md",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],templates:[{templateType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[],sourceFile:"./promptbook-collection/prepare-knowledge-from-markdown.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.ptbk.md",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],templates:[{templateType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[],sourceFile:"./promptbook-collection/prepare-knowledge-keywords.ptbk.md"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.ptbk.md",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],templates:[{templateType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Title should be concise and clear\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[],sourceFile:"./promptbook-collection/prepare-knowledge-title.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.ptbk.md",parameters:[{name:"availableModelNames",description:"List of available model names separated by comma (,)",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],templates:[{templateType:"PROMPT_TEMPLATE",name:"make-model-requirements",title:"Make modelRequirements",content:"You are experienced AI engineer, you need to create virtual assistant.\nWrite\n\n## Sample\n\n```json\n{\n\"modelName\": \"gpt-4o\",\n\"systemMessage\": \"You are experienced AI engineer and helpfull assistant.\",\n\"temperature\": 0.7\n}\n```\n\n## Instructions\n\n- Your output format is JSON object\n- Write just the JSON object, no other text should be present\n- It contains the following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nPick from the following models:\n\n- {availableModelNames}\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelRequirements",format:"JSON",dependentParameterNames:["availableModelNames","personaDescription"]}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[],sourceFile:"./promptbook-collection/prepare-persona.ptbk.md"}];
|
|
1839
1839
|
|
|
1840
1840
|
var defaultDiacriticsRemovalMap = [
|
|
1841
1841
|
{
|
|
@@ -2386,7 +2386,7 @@
|
|
|
2386
2386
|
return true;
|
|
2387
2387
|
}
|
|
2388
2388
|
/**
|
|
2389
|
-
* TODO: [🔃] !!!!! If the pipeline was prepared with different version or different set of models, prepare it once again
|
|
2389
|
+
* TODO: [🔃][main] !!!!! If the pipeline was prepared with different version or different set of models, prepare it once again
|
|
2390
2390
|
* TODO: [🐠] Maybe base this on `makeValidator`
|
|
2391
2391
|
* TODO: [🧊] Pipeline can be partially prepared, this should return true ONLY if fully prepared
|
|
2392
2392
|
* TODO: [🧿] Maybe do same process with same granularity and subfinctions as `preparePipeline`
|
|
@@ -2438,9 +2438,10 @@
|
|
|
2438
2438
|
});
|
|
2439
2439
|
Object.defineProperty(MultipleLlmExecutionTools.prototype, "description", {
|
|
2440
2440
|
get: function () {
|
|
2441
|
-
return this.llmExecutionTools
|
|
2442
|
-
|
|
2443
|
-
.
|
|
2441
|
+
return this.llmExecutionTools.map(function (_a, index) {
|
|
2442
|
+
var title = _a.title;
|
|
2443
|
+
return "".concat(index + 1, ") `").concat(title, "`");
|
|
2444
|
+
}).join('\n');
|
|
2444
2445
|
},
|
|
2445
2446
|
enumerable: false,
|
|
2446
2447
|
configurable: true
|
|
@@ -2638,7 +2639,7 @@
|
|
|
2638
2639
|
throw new PipelineExecutionError("You have not provided any `LlmExecutionTools`");
|
|
2639
2640
|
}
|
|
2640
2641
|
else {
|
|
2641
|
-
throw new PipelineExecutionError(spaceTrim__default["default"](function (block) { return "\n You have not provided any `LlmExecutionTools` that support model variant \"".concat(prompt.modelRequirements.modelVariant, "\"\n\n Available `LlmExecutionTools`:\n ").concat(block(_this.
|
|
2642
|
+
throw new PipelineExecutionError(spaceTrim__default["default"](function (block) { return "\n You have not provided any `LlmExecutionTools` that support model variant \"".concat(prompt.modelRequirements.modelVariant, "\"\n\n Available `LlmExecutionTools`:\n ").concat(block(_this.description), "\n\n "); }));
|
|
2642
2643
|
}
|
|
2643
2644
|
}
|
|
2644
2645
|
});
|
|
@@ -4818,7 +4819,7 @@
|
|
|
4818
4819
|
outputParameters = result.outputParameters;
|
|
4819
4820
|
knowledgePiecesRaw = outputParameters.knowledgePieces;
|
|
4820
4821
|
knowledgeTextPieces = (knowledgePiecesRaw || '').split('\n---\n');
|
|
4821
|
-
// <- TODO: !!!!! Smarter split and filter out empty pieces
|
|
4822
|
+
// <- TODO:[main] !!!!! Smarter split and filter out empty pieces
|
|
4822
4823
|
if (isVerbose) {
|
|
4823
4824
|
console.info('knowledgeTextPieces:', knowledgeTextPieces);
|
|
4824
4825
|
}
|
|
@@ -4903,7 +4904,7 @@
|
|
|
4903
4904
|
});
|
|
4904
4905
|
}
|
|
4905
4906
|
/**
|
|
4906
|
-
* TODO: [🐝][🔼] !!! Export via `@promptbook/markdown`
|
|
4907
|
+
* TODO: [🐝][🔼][main] !!! Export via `@promptbook/markdown`
|
|
4907
4908
|
* TODO: [🪂] Do it in parallel 11:11
|
|
4908
4909
|
* Note: No need to aggregate usage here, it is done by intercepting the llmTools
|
|
4909
4910
|
*/
|
|
@@ -4927,7 +4928,7 @@
|
|
|
4927
4928
|
var partialPieces, pieces;
|
|
4928
4929
|
return __generator(this, function (_a) {
|
|
4929
4930
|
switch (_a.label) {
|
|
4930
|
-
case 0: return [4 /*yield*/, prepareKnowledgeFromMarkdown(knowledgeSource.sourceContent, // <- TODO: [🐝] !!! Unhardcode markdown, detect which type it is - BE AWARE of big package size
|
|
4931
|
+
case 0: return [4 /*yield*/, prepareKnowledgeFromMarkdown(knowledgeSource.sourceContent, // <- TODO: [🐝][main] !!! Unhardcode markdown, detect which type it is - BE AWARE of big package size
|
|
4931
4932
|
options)];
|
|
4932
4933
|
case 1:
|
|
4933
4934
|
partialPieces = _a.sent();
|
|
@@ -5119,7 +5120,7 @@
|
|
|
5119
5120
|
});
|
|
5120
5121
|
}
|
|
5121
5122
|
/**
|
|
5122
|
-
* TODO: [🔃] !!!!! If the persona was prepared with different version or different set of models, prepare it once again
|
|
5123
|
+
* TODO: [🔃][main] !!!!! If the persona was prepared with different version or different set of models, prepare it once again
|
|
5123
5124
|
* TODO: [🏢] !! Check validity of `modelName` in pipeline
|
|
5124
5125
|
* TODO: [🏢] !! Check validity of `systemMessage` in pipeline
|
|
5125
5126
|
* TODO: [🏢] !! Check validity of `temperature` in pipeline
|
|
@@ -5168,7 +5169,7 @@
|
|
|
5168
5169
|
case 0:
|
|
5169
5170
|
_a = options.maxParallelCount, maxParallelCount = _a === void 0 ? MAX_PARALLEL_COUNT : _a;
|
|
5170
5171
|
templates = pipeline.templates, parameters = pipeline.parameters, knowledgePiecesCount = pipeline.knowledgePiecesCount;
|
|
5171
|
-
// TODO: !!!!! Apply samples to each template (if missing and is for the template defined)
|
|
5172
|
+
// TODO:[main] !!!!! Apply samples to each template (if missing and is for the template defined)
|
|
5172
5173
|
TODO_USE(parameters);
|
|
5173
5174
|
templatesPrepared = new Array(
|
|
5174
5175
|
// <- TODO: [🧱] Implement in a functional (not new Class) way
|
|
@@ -5200,7 +5201,7 @@
|
|
|
5200
5201
|
/**
|
|
5201
5202
|
* TODO: [🧠] Add context to each template (if missing)
|
|
5202
5203
|
* TODO: [🧠] What is better name `prepareTemplate` or `prepareTemplateAndParameters`
|
|
5203
|
-
* TODO: [♨] !!! Prepare index the samples and maybe templates
|
|
5204
|
+
* TODO: [♨][main] !!! Prepare index the samples and maybe templates
|
|
5204
5205
|
* TODO: Write tests for `preparePipeline`
|
|
5205
5206
|
* TODO: [🏏] Leverage the batch API and build queues @see https://platform.openai.com/docs/guides/batch
|
|
5206
5207
|
* TODO: [🧊] In future one preparation can take data from previous preparation and save tokens and time
|
|
@@ -5372,7 +5373,7 @@
|
|
|
5372
5373
|
if (sourceContent === '') {
|
|
5373
5374
|
throw new ParseError("Source is not defined");
|
|
5374
5375
|
}
|
|
5375
|
-
// TODO: !!!! Following checks should be applied every link in the `sourceContent`
|
|
5376
|
+
// TODO:[main] !!!! Following checks should be applied every link in the `sourceContent`
|
|
5376
5377
|
if (sourceContent.startsWith('http://')) {
|
|
5377
5378
|
throw new ParseError("Source is not secure");
|
|
5378
5379
|
}
|
|
@@ -5557,7 +5558,7 @@
|
|
|
5557
5558
|
if (command.templateType === 'KNOWLEDGE') {
|
|
5558
5559
|
knowledgeCommandParser.$applyToPipelineJson({
|
|
5559
5560
|
type: 'KNOWLEDGE',
|
|
5560
|
-
sourceContent: $templateJson.content, // <- TODO: [🐝] !!! Work with KNOWLEDGE which not referring to the source file or website, but its content itself
|
|
5561
|
+
sourceContent: $templateJson.content, // <- TODO: [🐝][main] !!! Work with KNOWLEDGE which not referring to the source file or website, but its content itself
|
|
5561
5562
|
}, $pipelineJson);
|
|
5562
5563
|
$templateJson.isTemplate = false;
|
|
5563
5564
|
return;
|
|
@@ -6075,7 +6076,7 @@
|
|
|
6075
6076
|
/**
|
|
6076
6077
|
* Link to discussion
|
|
6077
6078
|
*/
|
|
6078
|
-
documentationUrl: 'https://github.com/webgptorg/promptbook/discussions
|
|
6079
|
+
documentationUrl: 'https://github.com/webgptorg/promptbook/discussions/148',
|
|
6079
6080
|
/**
|
|
6080
6081
|
* Example usages of the FOREACH command
|
|
6081
6082
|
*/
|
|
@@ -6083,7 +6084,6 @@
|
|
|
6083
6084
|
'FOREACH Text Line `{customers}` -> `{customer}`',
|
|
6084
6085
|
'FOR Csv Row `{customers}` -> `{firstName}`, `{lastName}`',
|
|
6085
6086
|
'EACH Csv Cell `{customers}` -> `{cell}`',
|
|
6086
|
-
// <- TODO: [🍭] !!!!!! More
|
|
6087
6087
|
],
|
|
6088
6088
|
/**
|
|
6089
6089
|
* Parses the FOREACH command
|
|
@@ -6098,7 +6098,6 @@
|
|
|
6098
6098
|
return __spreadArray([formatDefinition.formatName], __read((formatDefinition.aliases || [])), false).includes(formatName);
|
|
6099
6099
|
});
|
|
6100
6100
|
if (formatDefinition === undefined) {
|
|
6101
|
-
console.info({ args: args, formatName: formatName });
|
|
6102
6101
|
throw new ParseError(spaceTrim__default["default"](function (block) { return "\n Unsupported format \"".concat(formatName, "\"\n\n Available formats:\n ").concat(block(FORMAT_DEFINITIONS.map(function (formatDefinition) { return formatDefinition.formatName; })
|
|
6103
6102
|
.map(function (formatName) { return "- ".concat(formatName); })
|
|
6104
6103
|
.join('\n')), "\n "); }));
|
|
@@ -6108,7 +6107,6 @@
|
|
|
6108
6107
|
return __spreadArray([subvalueDefinition.subvalueName], __read((subvalueDefinition.aliases || [])), false).includes(cellName);
|
|
6109
6108
|
});
|
|
6110
6109
|
if (subvalueDefinition === undefined) {
|
|
6111
|
-
console.info({ args: args, cellName: cellName });
|
|
6112
6110
|
throw new ParseError(spaceTrim__default["default"](function (block) { return "\n Unsupported cell name \"".concat(cellName, "\" for format \"").concat(formatName, "\"\n\n Available cell names for format \"").concat(formatDefinition.formatName, "\":\n ").concat(block(formatDefinition.subvalueDefinitions
|
|
6113
6111
|
.map(function (subvalueDefinition) { return subvalueDefinition.subvalueName; })
|
|
6114
6112
|
.map(function (subvalueName) { return "- ".concat(subvalueName); })
|
|
@@ -6116,14 +6114,12 @@
|
|
|
6116
6114
|
// <- TODO: [🏢] List all supported cell names for the format
|
|
6117
6115
|
}
|
|
6118
6116
|
if (assignSign !== '->') {
|
|
6119
|
-
console.info({ args: args, assignSign: assignSign });
|
|
6120
6117
|
throw new ParseError("FOREACH command must have '->' to assign the value to the parameter");
|
|
6121
6118
|
}
|
|
6122
|
-
// TODO:
|
|
6119
|
+
// TODO: !!! Replace with propper parameter name validation `validateParameterName`
|
|
6123
6120
|
if ((parameterNameWrapped === null || parameterNameWrapped === void 0 ? void 0 : parameterNameWrapped.substring(0, 1)) !== '{' ||
|
|
6124
6121
|
(parameterNameWrapped === null || parameterNameWrapped === void 0 ? void 0 : parameterNameWrapped.substring(parameterNameWrapped.length - 1, parameterNameWrapped.length)) !== '}') {
|
|
6125
|
-
|
|
6126
|
-
throw new ParseError("!!!!!! 1 Here will be error (with rules and precise error) from validateParameterName");
|
|
6122
|
+
throw new ParseError("Invalid parameter name \"".concat(parameterNameWrapped, "\" - must be wrapped in curly brackets: {parameterName}"));
|
|
6127
6123
|
}
|
|
6128
6124
|
var parameterName = parameterNameWrapped.substring(1, parameterNameWrapped.length - 1);
|
|
6129
6125
|
var subparameterNames = args
|
|
@@ -6152,7 +6148,7 @@
|
|
|
6152
6148
|
// TODO: !!!!!! Detect double use
|
|
6153
6149
|
// TODO: !!!!!! Detect usage with JOKER and don't allow it
|
|
6154
6150
|
$templateJson.foreach = { formatName: formatName, cellName: cellName, parameterName: parameterName, subparameterNames: subparameterNames };
|
|
6155
|
-
keepUnused($pipelineJson); // <- TODO:
|
|
6151
|
+
keepUnused($pipelineJson); // <- TODO: [🧠] Maybe register subparameter from foreach into parameters of the pipeline
|
|
6156
6152
|
// Note: [🍭] FOREACH apply has some sideeffects on different places in codebase
|
|
6157
6153
|
},
|
|
6158
6154
|
/**
|
|
@@ -6175,7 +6171,6 @@
|
|
|
6175
6171
|
},
|
|
6176
6172
|
};
|
|
6177
6173
|
/**
|
|
6178
|
-
* TODO: !!!!!! Remove console logs
|
|
6179
6174
|
* TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
|
|
6180
6175
|
* TODO: [🍭] !!!!!! Make .ptbk.md file with examples of the FOREACH command and also with wrong parsing and logic
|
|
6181
6176
|
*/
|
|
@@ -6860,6 +6855,7 @@
|
|
|
6860
6855
|
* Note: `$` is used to indicate that this function mutates given `pipelineJson`
|
|
6861
6856
|
*/
|
|
6862
6857
|
$applyToPipelineJson: function (command, $pipelineJson) {
|
|
6858
|
+
// TODO: Warn if the version is overridden
|
|
6863
6859
|
$pipelineJson.promptbookVersion = command.promptbookVersion;
|
|
6864
6860
|
},
|
|
6865
6861
|
/**
|
|
@@ -7680,7 +7676,7 @@
|
|
|
7680
7676
|
var $pipelineJson = {
|
|
7681
7677
|
title: undefined /* <- Note: [🍙] Putting here placeholder to keep `title` on top at final JSON */,
|
|
7682
7678
|
pipelineUrl: undefined /* <- Note: Putting here placeholder to keep `pipelineUrl` on top at final JSON */,
|
|
7683
|
-
promptbookVersion:
|
|
7679
|
+
promptbookVersion: undefined /* <- Note: By default no explicit version */,
|
|
7684
7680
|
description: undefined /* <- Note: [🍙] Putting here placeholder to keep `description` on top at final JSON */,
|
|
7685
7681
|
parameters: [],
|
|
7686
7682
|
templates: [],
|
|
@@ -7971,7 +7967,7 @@
|
|
|
7971
7967
|
return $asDeeplyFrozenSerializableJson('pipelineJson', $pipelineJson);
|
|
7972
7968
|
}
|
|
7973
7969
|
/**
|
|
7974
|
-
* TODO: !!!! Warn if used only sync version
|
|
7970
|
+
* TODO:[main] !!!! Warn if used only sync version
|
|
7975
7971
|
* TODO: [🚞] Report here line/column of error
|
|
7976
7972
|
* TODO: Use spaceTrim more effectively
|
|
7977
7973
|
* TODO: [🧠] Parameter flags - isInput, isOutput, isInternal
|
|
@@ -8185,7 +8181,7 @@
|
|
|
8185
8181
|
}
|
|
8186
8182
|
}
|
|
8187
8183
|
/**
|
|
8188
|
-
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
8184
|
+
* TODO: [🧠][main] !!! In-memory cache of same values to prevent multiple checks
|
|
8189
8185
|
* TODO: [🧠][💺] Can be done this on type-level?
|
|
8190
8186
|
*/
|
|
8191
8187
|
|