@promptbook/openai 0.66.0-9 → 0.67.0-0
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/esm/index.es.js +154 -17
- package/esm/index.es.js.map +1 -1
- package/esm/typings/src/_packages/core.index.d.ts +6 -4
- package/esm/typings/src/_packages/types.index.d.ts +7 -1
- package/esm/typings/src/_packages/utils.index.d.ts +14 -8
- package/esm/typings/src/commands/EXPECT/ExpectFormatCommand.d.ts +2 -0
- package/esm/typings/src/config.d.ts +6 -0
- package/esm/typings/src/errors/{ReferenceError.d.ts → PipelineUrlError.d.ts} +2 -2
- package/esm/typings/src/errors/index.d.ts +27 -0
- package/esm/typings/src/errors/utils/ErrorJson.d.ts +20 -0
- package/esm/typings/src/errors/utils/deserializeError.d.ts +7 -0
- package/esm/typings/src/errors/utils/deserializeError.test.d.ts +1 -0
- package/esm/typings/src/errors/utils/serializeError.d.ts +7 -0
- package/esm/typings/src/errors/utils/serializeError.test.d.ts +1 -0
- package/esm/typings/src/execution/ExecutionTools.d.ts +4 -1
- package/esm/typings/src/execution/PipelineExecutor.d.ts +1 -47
- package/esm/typings/src/execution/PipelineExecutorResult.d.ts +49 -0
- package/esm/typings/src/execution/PromptResult.d.ts +5 -4
- package/esm/typings/src/execution/PromptResultUsage.d.ts +4 -0
- package/esm/typings/src/execution/UncertainNumber.d.ts +1 -0
- package/esm/typings/src/execution/assertsExecutionSuccessful.d.ts +2 -2
- package/esm/typings/src/llm-providers/_common/utils/cache/CacheItem.d.ts +0 -1
- package/esm/typings/src/llm-providers/mocked/$fakeTextToExpectations.d.ts +2 -2
- package/esm/typings/src/llm-providers/mocked/MockedFackedLlmExecutionTools.d.ts +3 -3
- package/esm/typings/src/llm-providers/remote/RemoteLlmExecutionTools.d.ts +1 -0
- package/esm/typings/src/llm-providers/remote/interfaces/PromptbookServer_Error.d.ts +2 -6
- package/esm/typings/src/llm-providers/remote/startRemoteServer.d.ts +1 -0
- package/esm/typings/src/scripting/javascript/JavascriptExecutionToolsOptions.d.ts +2 -2
- package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -1
- package/esm/typings/src/types/ModelRequirements.d.ts +5 -5
- package/esm/typings/src/types/PipelineJson/Expectations.d.ts +3 -1
- package/esm/typings/src/types/PipelineJson/KnowledgePieceJson.d.ts +2 -0
- package/esm/typings/src/types/PipelineJson/KnowledgeSourceJson.d.ts +4 -0
- package/esm/typings/src/types/PipelineJson/LlmTemplateJson.d.ts +2 -0
- package/esm/typings/src/types/PipelineJson/PersonaJson.d.ts +4 -0
- package/esm/typings/src/types/PipelineJson/PipelineJson.d.ts +2 -0
- package/esm/typings/src/types/PipelineJson/PromptDialogJson.d.ts +1 -0
- package/esm/typings/src/types/PipelineJson/PromptTemplateJson.d.ts +2 -0
- package/esm/typings/src/types/PipelineJson/PromptTemplateJsonCommon.d.ts +2 -2
- package/esm/typings/src/types/PipelineJson/PromptTemplateParameterJson.d.ts +2 -0
- package/esm/typings/src/types/PipelineJson/ScriptJson.d.ts +1 -0
- package/esm/typings/src/types/PipelineJson/SimpleTemplateJson.d.ts +1 -0
- package/esm/typings/src/types/Prompt.d.ts +7 -7
- package/esm/typings/src/types/ScriptLanguage.d.ts +2 -0
- package/esm/typings/src/types/execution-report/ExecutionPromptReportJson.d.ts +24 -0
- package/esm/typings/src/types/execution-report/ExecutionReportJson.d.ts +3 -20
- package/esm/typings/src/types/typeAliases.d.ts +7 -0
- package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +1 -4
- package/esm/typings/src/utils/serialization/$asDeeplyFrozenSerializableJson.d.ts +17 -0
- package/esm/typings/src/utils/{deepFreeze.d.ts → serialization/$deepFreeze.d.ts} +0 -10
- package/esm/typings/src/utils/serialization/checkSerializableAsJson.d.ts +27 -0
- package/esm/typings/src/utils/{clonePipeline.d.ts → serialization/clonePipeline.d.ts} +1 -1
- package/esm/typings/src/utils/serialization/isSerializableAsJson.d.ts +24 -0
- package/esm/typings/src/utils/serialization/isSerializableAsJson.test.d.ts +1 -0
- package/package.json +2 -2
- package/umd/index.umd.js +154 -17
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/errors/VersionMismatchError.d.ts +0 -10
- /package/esm/typings/src/utils/{deepClone.d.ts → serialization/deepClone.d.ts} +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { BlockType } from '../../commands/BLOCK/BlockTypes';
|
|
2
2
|
import type { ExpectFormatCommand } from '../../commands/EXPECT/ExpectFormatCommand';
|
|
3
3
|
import type { string_javascript } from '../typeAliases';
|
|
4
|
-
import type { string_javascript_name } from '../typeAliases';
|
|
5
4
|
import type { string_markdown } from '../typeAliases';
|
|
6
5
|
import type { string_markdown_text } from '../typeAliases';
|
|
7
6
|
import type { string_name } from '../typeAliases';
|
|
8
7
|
import type { string_parameter_name } from '../typeAliases';
|
|
8
|
+
import type { string_postprocessing_function_name } from '../typeAliases';
|
|
9
9
|
import type { string_prompt } from '../typeAliases';
|
|
10
10
|
import type { string_template } from '../typeAliases';
|
|
11
11
|
import type { Expectations } from './Expectations';
|
|
@@ -66,7 +66,7 @@ export interface PromptTemplateJsonCommon {
|
|
|
66
66
|
*
|
|
67
67
|
* @see https://github.com/webgptorg/promptbook/discussions/31
|
|
68
68
|
*/
|
|
69
|
-
readonly postprocessingFunctionNames?: Array<
|
|
69
|
+
readonly postprocessingFunctionNames?: Array<string_postprocessing_function_name>;
|
|
70
70
|
/**
|
|
71
71
|
* Expect this amount of each unit in the answer
|
|
72
72
|
*
|
|
@@ -3,6 +3,8 @@ import type { string_parameter_name } from '../typeAliases';
|
|
|
3
3
|
import type { string_parameter_value } from '../typeAliases';
|
|
4
4
|
/**
|
|
5
5
|
* Describes one parameter of the promptbook
|
|
6
|
+
*
|
|
7
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
6
8
|
*/
|
|
7
9
|
export type PromptTemplateParameterJson = {
|
|
8
10
|
/**
|
|
@@ -3,6 +3,7 @@ import type { PromptTemplateJsonCommon } from './PromptTemplateJsonCommon';
|
|
|
3
3
|
/**
|
|
4
4
|
* Template for script execution
|
|
5
5
|
*
|
|
6
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
6
7
|
* @see https://github.com/webgptorg/promptbook/discussions/77
|
|
7
8
|
*/
|
|
8
9
|
export type ScriptJson = PromptTemplateJsonCommon & {
|
|
@@ -2,6 +2,7 @@ import type { PromptTemplateJsonCommon } from './PromptTemplateJsonCommon';
|
|
|
2
2
|
/**
|
|
3
3
|
* Template for simple concatenation of strings
|
|
4
4
|
*
|
|
5
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
5
6
|
* @see https://github.com/webgptorg/promptbook/discussions/17
|
|
6
7
|
*/
|
|
7
8
|
export type SimpleTemplateJson = PromptTemplateJsonCommon & {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { ExpectFormatCommand } from '../commands/EXPECT/ExpectFormatCommand';
|
|
2
|
-
import type { PostprocessingFunction } from '../scripting/javascript/JavascriptExecutionToolsOptions';
|
|
3
2
|
import type { ChatModelRequirements } from './ModelRequirements';
|
|
4
3
|
import type { CompletionModelRequirements } from './ModelRequirements';
|
|
5
4
|
import type { EmbeddingModelRequirements } from './ModelRequirements';
|
|
@@ -7,20 +6,21 @@ import type { ModelRequirements } from './ModelRequirements';
|
|
|
7
6
|
import type { Expectations } from './PipelineJson/Expectations';
|
|
8
7
|
import type { Parameters } from './typeAliases';
|
|
9
8
|
import type { string_pipeline_url_with_hashtemplate } from './typeAliases';
|
|
9
|
+
import type { string_postprocessing_function_name } from './typeAliases';
|
|
10
10
|
import type { string_prompt } from './typeAliases';
|
|
11
11
|
import type { string_template } from './typeAliases';
|
|
12
12
|
import type { string_title } from './typeAliases';
|
|
13
13
|
/**
|
|
14
14
|
* Prompt in a text along with model requirements, but without any execution or templating logic.
|
|
15
15
|
*
|
|
16
|
-
* Note: [
|
|
16
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
17
17
|
* @see https://github.com/webgptorg/promptbook#prompt
|
|
18
18
|
*/
|
|
19
19
|
export type Prompt = CompletionPrompt | ChatPrompt | EmbeddingPrompt;
|
|
20
20
|
/**
|
|
21
21
|
* Completion prompt
|
|
22
22
|
*
|
|
23
|
-
* Note: [
|
|
23
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
24
24
|
*/
|
|
25
25
|
export type CompletionPrompt = CommonPrompt & {
|
|
26
26
|
/**
|
|
@@ -31,7 +31,7 @@ export type CompletionPrompt = CommonPrompt & {
|
|
|
31
31
|
/**
|
|
32
32
|
* Chat prompt
|
|
33
33
|
*
|
|
34
|
-
* Note: [
|
|
34
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
35
35
|
*/
|
|
36
36
|
export type ChatPrompt = CommonPrompt & {
|
|
37
37
|
/**
|
|
@@ -42,7 +42,7 @@ export type ChatPrompt = CommonPrompt & {
|
|
|
42
42
|
/**
|
|
43
43
|
* Embedding prompt
|
|
44
44
|
*
|
|
45
|
-
* Note: [
|
|
45
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
46
46
|
*/
|
|
47
47
|
export type EmbeddingPrompt = CommonPrompt & {
|
|
48
48
|
/**
|
|
@@ -53,7 +53,7 @@ export type EmbeddingPrompt = CommonPrompt & {
|
|
|
53
53
|
/**
|
|
54
54
|
* Common properties for all prompt results
|
|
55
55
|
*
|
|
56
|
-
* Note: This is fully serializable as JSON
|
|
56
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
57
57
|
*/
|
|
58
58
|
export type CommonPrompt = {
|
|
59
59
|
/**
|
|
@@ -75,7 +75,7 @@ export type CommonPrompt = {
|
|
|
75
75
|
/**
|
|
76
76
|
* List of postprocessing steps that are executed after the prompt
|
|
77
77
|
*/
|
|
78
|
-
readonly
|
|
78
|
+
readonly postprocessingFunctionNames?: Array<string_postprocessing_function_name>;
|
|
79
79
|
/**
|
|
80
80
|
* Expectations for the answer
|
|
81
81
|
*
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ErrorJson } from '../../errors/utils/ErrorJson';
|
|
2
|
+
import type { PromptResult } from '../../execution/PromptResult';
|
|
3
|
+
import type { Prompt } from '../Prompt';
|
|
4
|
+
/**
|
|
5
|
+
* Report of single prompt execution
|
|
6
|
+
*
|
|
7
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
8
|
+
*/
|
|
9
|
+
export type ExecutionPromptReportJson = {
|
|
10
|
+
/**
|
|
11
|
+
* The prompt wich was executed
|
|
12
|
+
*/
|
|
13
|
+
readonly prompt: Omit<Prompt, 'pipelineUrl'>;
|
|
14
|
+
/**
|
|
15
|
+
* Result of the prompt execution (if not failed during LLM execution)
|
|
16
|
+
*/
|
|
17
|
+
readonly result?: PromptResult;
|
|
18
|
+
/**
|
|
19
|
+
* The error which occured during LLM execution or during postprocessing or expectation checking
|
|
20
|
+
*
|
|
21
|
+
* Note: It makes sense to have both error and result defined, for example when the result not pass expectations
|
|
22
|
+
*/
|
|
23
|
+
readonly error?: ErrorJson;
|
|
24
|
+
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { PromptResult } from '../../execution/PromptResult';
|
|
2
|
-
import type { Prompt } from '../Prompt';
|
|
3
1
|
import type { string_markdown_text } from '../typeAliases';
|
|
4
2
|
import type { string_pipeline_url } from '../typeAliases';
|
|
5
3
|
import type { string_semantic_version } from '../typeAliases';
|
|
4
|
+
import type { ExecutionPromptReportJson } from './ExecutionPromptReportJson';
|
|
6
5
|
/**
|
|
7
6
|
* ExecutionReport is result of executing one promptbook
|
|
8
7
|
* It is kind of a variant of the promptbook usefull for debugging, logging and transparency for users.
|
|
@@ -11,6 +10,7 @@ import type { string_semantic_version } from '../typeAliases';
|
|
|
11
10
|
* - **.md file** created from the **JSON** format
|
|
12
11
|
* - _(this)_ **JSON** format
|
|
13
12
|
*
|
|
13
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
14
14
|
* @see https://github.com/webgptorg/promptbook#execution-report
|
|
15
15
|
*/
|
|
16
16
|
export type ExecutionReportJson = {
|
|
@@ -37,22 +37,5 @@ export type ExecutionReportJson = {
|
|
|
37
37
|
/**
|
|
38
38
|
* Sequence of prompt templates in order which were executed
|
|
39
39
|
*/
|
|
40
|
-
readonly promptExecutions: Array<
|
|
41
|
-
/**
|
|
42
|
-
* The prompt wich was executed
|
|
43
|
-
*/
|
|
44
|
-
readonly prompt: Omit<Prompt, 'pipelineUrl'>;
|
|
45
|
-
/**
|
|
46
|
-
* Result of the prompt execution (if not failed during LLM execution)
|
|
47
|
-
*/
|
|
48
|
-
readonly result?: PromptResult;
|
|
49
|
-
/**
|
|
50
|
-
* The error which occured during LLM execution or during postprocessing or expectation checking
|
|
51
|
-
*
|
|
52
|
-
* Note: It makes sense to have both error and result defined, for example when the result not pass expectations
|
|
53
|
-
*/
|
|
54
|
-
readonly error?: {
|
|
55
|
-
readonly message: string;
|
|
56
|
-
};
|
|
57
|
-
}>;
|
|
40
|
+
readonly promptExecutions: Array<ExecutionPromptReportJson>;
|
|
58
41
|
};
|
|
@@ -103,6 +103,7 @@ export type string_parameter_value = string;
|
|
|
103
103
|
* - **Intermediate parameters** are used internally in the pipeline.
|
|
104
104
|
* - **OUTPUT PARAMETERs** are not used internally in the pipeline, but are returned as the result of the pipeline execution.
|
|
105
105
|
*
|
|
106
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
106
107
|
* @see https://ptbk.io/parameters
|
|
107
108
|
*/
|
|
108
109
|
export type Parameters = Exclude<Record<string_parameter_name, string_parameter_value>, ReservedParameters>;
|
|
@@ -115,6 +116,8 @@ export type Parameters = Exclude<Record<string_parameter_name, string_parameter_
|
|
|
115
116
|
export type string_reserved_parameter_name = TupleToUnion<typeof RESERVED_PARAMETER_NAMES>;
|
|
116
117
|
/**
|
|
117
118
|
* @@@
|
|
119
|
+
*
|
|
120
|
+
* Note: [🚉] This is fully serializable as JSON
|
|
118
121
|
*/
|
|
119
122
|
export type ReservedParameters = Record<string_reserved_parameter_name, string_parameter_value>;
|
|
120
123
|
/**
|
|
@@ -514,6 +517,10 @@ export type string_translate_language = 'en' | 'cs';
|
|
|
514
517
|
* Semantic helper; For example "callbackName" or "renderMe"
|
|
515
518
|
*/
|
|
516
519
|
export type string_javascript_name = string;
|
|
520
|
+
/**
|
|
521
|
+
* Semantic helper; For example "unwrapResult" or "spaceTrim"
|
|
522
|
+
*/
|
|
523
|
+
export type string_postprocessing_function_name = string;
|
|
517
524
|
export type string_token = string;
|
|
518
525
|
export type string_license_token = string_token;
|
|
519
526
|
export type string_password = string;
|
|
@@ -4,9 +4,6 @@ import type { really_any } from '../organization/really_any';
|
|
|
4
4
|
*
|
|
5
5
|
* Note: `$` is used to indicate that this function is not a pure function - it access global scope
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
* @private internal function of `$Register`
|
|
8
8
|
*/
|
|
9
9
|
export declare function $getGlobalScope(): really_any;
|
|
10
|
-
/***
|
|
11
|
-
* TODO: !!!!! Make private and promptbook registry from this
|
|
12
|
-
*/
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { string_name } from '../../types/typeAliases';
|
|
2
|
+
/**
|
|
3
|
+
* @@@
|
|
4
|
+
* @@@
|
|
5
|
+
*
|
|
6
|
+
* Note: This function mutates the object and returns the original (but mutated-deep-freezed) object
|
|
7
|
+
*
|
|
8
|
+
* @param name - Name of the object for debugging purposes
|
|
9
|
+
* @param objectValue - Object to be deeply frozen
|
|
10
|
+
* @returns The same object as the input, but deeply frozen
|
|
11
|
+
* @private this is in comparison to `deepFreeze` a more specific utility and maybe not very good practice to use without specific reason and considerations
|
|
12
|
+
*/
|
|
13
|
+
export declare function $asDeeplyFrozenSerializableJson<TObject>(name: string_name, objectValue: TObject): TObject;
|
|
14
|
+
/**
|
|
15
|
+
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
16
|
+
* TODO: [🧠] Is there a way how to meaningfully test this utility
|
|
17
|
+
*/
|
|
@@ -9,16 +9,6 @@ import type { ReadonlyDeep } from 'type-fest';
|
|
|
9
9
|
* @public exported from `@promptbook/utils`
|
|
10
10
|
*/
|
|
11
11
|
export declare function $deepFreeze<TObject>(objectValue: TObject): ReadonlyDeep<TObject>;
|
|
12
|
-
/**
|
|
13
|
-
* @@@
|
|
14
|
-
* @@@
|
|
15
|
-
*
|
|
16
|
-
* Note: This function mutates the object and returns the original (but mutated-deep-freezed) object
|
|
17
|
-
*
|
|
18
|
-
* @returns The same object as the input, but deeply frozen
|
|
19
|
-
* @private this is in comparison to `deepFreeze` a more specific utility and maybe not very good practice to use without specific reason and considerations
|
|
20
|
-
*/
|
|
21
|
-
export declare function deepFreezeWithSameType<TObject>(objectValue: TObject): TObject;
|
|
22
12
|
/**
|
|
23
13
|
* TODO: [🧠] Is there a way how to meaningfully test this utility
|
|
24
14
|
*/
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { string_name } from '../../types/typeAliases';
|
|
2
|
+
/**
|
|
3
|
+
* Checks if the value is [🚉] serializable as JSON
|
|
4
|
+
* If not, throws an UnexpectedError with a rich error message and tracking
|
|
5
|
+
*
|
|
6
|
+
* - Almost all primitives are serializable BUT:
|
|
7
|
+
* - `undefined` is not serializable
|
|
8
|
+
* - `NaN` is not serializable
|
|
9
|
+
* - Objects and arrays are serializable if all their properties are serializable
|
|
10
|
+
* - Functions are not serializable
|
|
11
|
+
* - Circular references are not serializable
|
|
12
|
+
* - `Date` objects are not serializable
|
|
13
|
+
* - `Map` and `Set` objects are not serializable
|
|
14
|
+
* - `RegExp` objects are not serializable
|
|
15
|
+
* - `Error` objects are not serializable
|
|
16
|
+
* - `Symbol` objects are not serializable
|
|
17
|
+
* - And much more...
|
|
18
|
+
*
|
|
19
|
+
* @throws UnexpectedError if the value is not serializable as JSON
|
|
20
|
+
* @public exported from `@promptbook/utils`
|
|
21
|
+
*/
|
|
22
|
+
export declare function checkSerializableAsJson(name: string_name, value: unknown): void;
|
|
23
|
+
/**
|
|
24
|
+
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
25
|
+
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
26
|
+
* Note: [🐠] This is how `checkSerializableAsJson` + `isSerializableAsJson` together can just retun true/false or rich error message
|
|
27
|
+
*/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests if the value is [🚉] serializable as JSON
|
|
3
|
+
*
|
|
4
|
+
* - Almost all primitives are serializable BUT:
|
|
5
|
+
* - `undefined` is not serializable
|
|
6
|
+
* - `NaN` is not serializable
|
|
7
|
+
* - Objects and arrays are serializable if all their properties are serializable
|
|
8
|
+
* - Functions are not serializable
|
|
9
|
+
* - Circular references are not serializable
|
|
10
|
+
* - `Date` objects are not serializable
|
|
11
|
+
* - `Map` and `Set` objects are not serializable
|
|
12
|
+
* - `RegExp` objects are not serializable
|
|
13
|
+
* - `Error` objects are not serializable
|
|
14
|
+
* - `Symbol` objects are not serializable
|
|
15
|
+
* - And much more...
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* @public exported from `@promptbook/utils`
|
|
19
|
+
*/
|
|
20
|
+
export declare function isSerializableAsJson(value: unknown): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
23
|
+
* TODO: [🧠][💺] Can be done this on type-level?
|
|
24
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@promptbook/openai",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0-0",
|
|
4
4
|
"description": "Supercharge your use of large language models",
|
|
5
5
|
"private": false,
|
|
6
6
|
"sideEffects": false,
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"module": "./esm/index.es.js",
|
|
48
48
|
"typings": "./esm/typings/src/_packages/openai.index.d.ts",
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@promptbook/core": "0.
|
|
50
|
+
"@promptbook/core": "0.67.0-0"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"colors": "1.4.0",
|
package/umd/index.umd.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
/**
|
|
15
15
|
* The version of the Promptbook library
|
|
16
16
|
*/
|
|
17
|
-
var PROMPTBOOK_VERSION = '0.66.0
|
|
17
|
+
var PROMPTBOOK_VERSION = '0.66.0';
|
|
18
18
|
// TODO: !!!! List here all the versions and annotate + put into script
|
|
19
19
|
|
|
20
20
|
/*! *****************************************************************************
|
|
@@ -211,6 +211,149 @@
|
|
|
211
211
|
* TODO: [🧠] Is there a way how to meaningfully test this utility
|
|
212
212
|
*/
|
|
213
213
|
|
|
214
|
+
/**
|
|
215
|
+
* Checks if the value is [🚉] serializable as JSON
|
|
216
|
+
* If not, throws an UnexpectedError with a rich error message and tracking
|
|
217
|
+
*
|
|
218
|
+
* - Almost all primitives are serializable BUT:
|
|
219
|
+
* - `undefined` is not serializable
|
|
220
|
+
* - `NaN` is not serializable
|
|
221
|
+
* - Objects and arrays are serializable if all their properties are serializable
|
|
222
|
+
* - Functions are not serializable
|
|
223
|
+
* - Circular references are not serializable
|
|
224
|
+
* - `Date` objects are not serializable
|
|
225
|
+
* - `Map` and `Set` objects are not serializable
|
|
226
|
+
* - `RegExp` objects are not serializable
|
|
227
|
+
* - `Error` objects are not serializable
|
|
228
|
+
* - `Symbol` objects are not serializable
|
|
229
|
+
* - And much more...
|
|
230
|
+
*
|
|
231
|
+
* @throws UnexpectedError if the value is not serializable as JSON
|
|
232
|
+
* @public exported from `@promptbook/utils`
|
|
233
|
+
*/
|
|
234
|
+
function checkSerializableAsJson(name, value) {
|
|
235
|
+
var e_1, _a;
|
|
236
|
+
if (value === undefined) {
|
|
237
|
+
throw new UnexpectedError("".concat(name, " is undefined"));
|
|
238
|
+
}
|
|
239
|
+
else if (value === null) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
else if (typeof value === 'boolean') {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
else if (typeof value === 'number' && !isNaN(value)) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
else if (typeof value === 'string') {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
else if (typeof value === 'symbol') {
|
|
252
|
+
throw new UnexpectedError("".concat(name, " is symbol"));
|
|
253
|
+
}
|
|
254
|
+
else if (typeof value === 'function') {
|
|
255
|
+
throw new UnexpectedError("".concat(name, " is function"));
|
|
256
|
+
}
|
|
257
|
+
else if (typeof value === 'object' && Array.isArray(value)) {
|
|
258
|
+
for (var i = 0; i < value.length; i++) {
|
|
259
|
+
checkSerializableAsJson("".concat(name, "[").concat(i, "]"), value[i]);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else if (typeof value === 'object') {
|
|
263
|
+
if (value instanceof Date) {
|
|
264
|
+
throw new UnexpectedError(spaceTrim__default["default"]("\n ".concat(name, " is Date\n\n Use `string_date_iso8601` instead\n ")));
|
|
265
|
+
}
|
|
266
|
+
else if (value instanceof Map) {
|
|
267
|
+
throw new UnexpectedError("".concat(name, " is Map"));
|
|
268
|
+
}
|
|
269
|
+
else if (value instanceof Set) {
|
|
270
|
+
throw new UnexpectedError("".concat(name, " is Set"));
|
|
271
|
+
}
|
|
272
|
+
else if (value instanceof RegExp) {
|
|
273
|
+
throw new UnexpectedError("".concat(name, " is RegExp"));
|
|
274
|
+
}
|
|
275
|
+
else if (value instanceof Error) {
|
|
276
|
+
throw new UnexpectedError(spaceTrim__default["default"]("\n ".concat(name, " is unserialized Error\n\n Use function `serializeError`\n ")));
|
|
277
|
+
}
|
|
278
|
+
else {
|
|
279
|
+
try {
|
|
280
|
+
for (var _b = __values(Object.entries(value)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
281
|
+
var _d = __read(_c.value, 2), subName = _d[0], subValue = _d[1];
|
|
282
|
+
if (subValue === undefined) {
|
|
283
|
+
// Note: undefined in object is serializable - it is just omited
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
checkSerializableAsJson("".concat(name, ".").concat(subName), subValue);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
290
|
+
finally {
|
|
291
|
+
try {
|
|
292
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
293
|
+
}
|
|
294
|
+
finally { if (e_1) throw e_1.error; }
|
|
295
|
+
}
|
|
296
|
+
try {
|
|
297
|
+
JSON.stringify(value); // <- TODO: [0]
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
if (!(error instanceof Error)) {
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
throw new UnexpectedError(spaceTrim__default["default"](function (block) { return "\n ".concat(name, " is not serializable\n\n ").concat(block(error.toString()), "\n "); }));
|
|
304
|
+
}
|
|
305
|
+
/*
|
|
306
|
+
TODO: [0] Is there some more elegant way to check circular references?
|
|
307
|
+
const seen = new Set();
|
|
308
|
+
const stack = [{ value }];
|
|
309
|
+
while (stack.length > 0) {
|
|
310
|
+
const { value } = stack.pop()!;
|
|
311
|
+
if (typeof value === 'object' && value !== null) {
|
|
312
|
+
if (seen.has(value)) {
|
|
313
|
+
throw new UnexpectedError(`${name} has circular reference`);
|
|
314
|
+
}
|
|
315
|
+
seen.add(value);
|
|
316
|
+
if (Array.isArray(value)) {
|
|
317
|
+
stack.push(...value.map((value) => ({ value })));
|
|
318
|
+
} else {
|
|
319
|
+
stack.push(...Object.values(value).map((value) => ({ value })));
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
*/
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
throw new UnexpectedError("".concat(name, " is unknown"));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
333
|
+
* TODO: [🧠] !!! In-memory cache of same values to prevent multiple checks
|
|
334
|
+
* Note: [🐠] This is how `checkSerializableAsJson` + `isSerializableAsJson` together can just retun true/false or rich error message
|
|
335
|
+
*/
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* @@@
|
|
339
|
+
* @@@
|
|
340
|
+
*
|
|
341
|
+
* Note: This function mutates the object and returns the original (but mutated-deep-freezed) object
|
|
342
|
+
*
|
|
343
|
+
* @param name - Name of the object for debugging purposes
|
|
344
|
+
* @param objectValue - Object to be deeply frozen
|
|
345
|
+
* @returns The same object as the input, but deeply frozen
|
|
346
|
+
* @private this is in comparison to `deepFreeze` a more specific utility and maybe not very good practice to use without specific reason and considerations
|
|
347
|
+
*/
|
|
348
|
+
function $asDeeplyFrozenSerializableJson(name, objectValue) {
|
|
349
|
+
checkSerializableAsJson(name, objectValue);
|
|
350
|
+
return $deepFreeze(objectValue);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* TODO: [🧠][🛣] More elegant way to tracking than passing `name`
|
|
354
|
+
* TODO: [🧠] Is there a way how to meaningfully test this utility
|
|
355
|
+
*/
|
|
356
|
+
|
|
214
357
|
// <- TODO: [🧠] Better system for generator warnings - not always "code" and "by `@promptbook/cli`"
|
|
215
358
|
/**
|
|
216
359
|
* The maximum number of iterations for a loops
|
|
@@ -229,7 +372,7 @@
|
|
|
229
372
|
*
|
|
230
373
|
* @public exported from `@promptbook/core`
|
|
231
374
|
*/
|
|
232
|
-
$
|
|
375
|
+
$asDeeplyFrozenSerializableJson('RESERVED_PARAMETER_NAMES', [
|
|
233
376
|
'content',
|
|
234
377
|
'context',
|
|
235
378
|
'knowledge',
|
|
@@ -739,7 +882,7 @@
|
|
|
739
882
|
* @see https://openai.com/api/pricing/
|
|
740
883
|
* @public exported from `@promptbook/openai`
|
|
741
884
|
*/
|
|
742
|
-
var OPENAI_MODELS = [
|
|
885
|
+
var OPENAI_MODELS = $asDeeplyFrozenSerializableJson('OPENAI_MODELS', [
|
|
743
886
|
/*/
|
|
744
887
|
{
|
|
745
888
|
modelTitle: 'dall-e-3',
|
|
@@ -1067,7 +1210,7 @@
|
|
|
1067
1210
|
},
|
|
1068
1211
|
},
|
|
1069
1212
|
/**/
|
|
1070
|
-
];
|
|
1213
|
+
]);
|
|
1071
1214
|
/**
|
|
1072
1215
|
* Note: [🤖] Add models of new variant
|
|
1073
1216
|
* TODO: [🧠] Some mechanism to propagate unsureness
|
|
@@ -1267,7 +1410,7 @@
|
|
|
1267
1410
|
if (resultContent === null) {
|
|
1268
1411
|
throw new PipelineExecutionError('No response message from OpenAI');
|
|
1269
1412
|
}
|
|
1270
|
-
return [2 /*return*/, {
|
|
1413
|
+
return [2 /*return*/, $asDeeplyFrozenSerializableJson('OpenAiExecutionTools ChatPromptResult', {
|
|
1271
1414
|
content: resultContent,
|
|
1272
1415
|
modelName: rawResponse.model || modelName,
|
|
1273
1416
|
timing: {
|
|
@@ -1279,7 +1422,7 @@
|
|
|
1279
1422
|
rawRequest: rawRequest,
|
|
1280
1423
|
rawResponse: rawResponse,
|
|
1281
1424
|
// <- [🗯]
|
|
1282
|
-
}];
|
|
1425
|
+
})];
|
|
1283
1426
|
}
|
|
1284
1427
|
});
|
|
1285
1428
|
});
|
|
@@ -1336,7 +1479,7 @@
|
|
|
1336
1479
|
// eslint-disable-next-line prefer-const
|
|
1337
1480
|
complete = getCurrentIsoDate();
|
|
1338
1481
|
usage = computeOpenAiUsage(content, resultContent || '', rawResponse);
|
|
1339
|
-
return [2 /*return*/, {
|
|
1482
|
+
return [2 /*return*/, $asDeeplyFrozenSerializableJson('OpenAiExecutionTools CompletionPromptResult', {
|
|
1340
1483
|
content: resultContent,
|
|
1341
1484
|
modelName: rawResponse.model || modelName,
|
|
1342
1485
|
timing: {
|
|
@@ -1348,7 +1491,7 @@
|
|
|
1348
1491
|
rawRequest: rawRequest,
|
|
1349
1492
|
rawResponse: rawResponse,
|
|
1350
1493
|
// <- [🗯]
|
|
1351
|
-
}];
|
|
1494
|
+
})];
|
|
1352
1495
|
}
|
|
1353
1496
|
});
|
|
1354
1497
|
});
|
|
@@ -1396,7 +1539,7 @@
|
|
|
1396
1539
|
// eslint-disable-next-line prefer-const
|
|
1397
1540
|
complete = getCurrentIsoDate();
|
|
1398
1541
|
usage = computeOpenAiUsage(content, '', rawResponse);
|
|
1399
|
-
return [2 /*return*/, {
|
|
1542
|
+
return [2 /*return*/, $asDeeplyFrozenSerializableJson('OpenAiExecutionTools EmbeddingPromptResult', {
|
|
1400
1543
|
content: resultContent,
|
|
1401
1544
|
modelName: rawResponse.model || modelName,
|
|
1402
1545
|
timing: {
|
|
@@ -1408,7 +1551,7 @@
|
|
|
1408
1551
|
rawRequest: rawRequest,
|
|
1409
1552
|
rawResponse: rawResponse,
|
|
1410
1553
|
// <- [🗯]
|
|
1411
|
-
}];
|
|
1554
|
+
})];
|
|
1412
1555
|
}
|
|
1413
1556
|
});
|
|
1414
1557
|
});
|
|
@@ -1482,14 +1625,11 @@
|
|
|
1482
1625
|
*
|
|
1483
1626
|
* Note: `$` is used to indicate that this function is not a pure function - it access global scope
|
|
1484
1627
|
*
|
|
1485
|
-
*
|
|
1628
|
+
* @private internal function of `$Register`
|
|
1486
1629
|
*/
|
|
1487
1630
|
function $getGlobalScope() {
|
|
1488
1631
|
return Function('return this')();
|
|
1489
1632
|
}
|
|
1490
|
-
/***
|
|
1491
|
-
* TODO: !!!!! Make private and promptbook registry from this
|
|
1492
|
-
*/
|
|
1493
1633
|
|
|
1494
1634
|
/**
|
|
1495
1635
|
* Register is @@@
|
|
@@ -1520,13 +1660,10 @@
|
|
|
1520
1660
|
var packageName = registered.packageName, className = registered.className;
|
|
1521
1661
|
var existingRegistrationIndex = this.storage.findIndex(function (item) { return item.packageName === packageName && item.className === className; });
|
|
1522
1662
|
var existingRegistration = this.storage[existingRegistrationIndex];
|
|
1523
|
-
// TODO: !!!!!! Global IS_VERBOSE mode
|
|
1524
1663
|
if (!existingRegistration) {
|
|
1525
|
-
console.warn("[\uD83D\uDCE6] Registering `".concat(packageName, ".").concat(className, "` to `").concat(this.storageName, "`"));
|
|
1526
1664
|
this.storage.push(registered);
|
|
1527
1665
|
}
|
|
1528
1666
|
else {
|
|
1529
|
-
console.warn("[\uD83D\uDCE6] Re-registering `".concat(packageName, ".").concat(className, "` to `").concat(this.storageName, "`"));
|
|
1530
1667
|
this.storage[existingRegistrationIndex] = registered;
|
|
1531
1668
|
}
|
|
1532
1669
|
};
|