@promptbook/types 0.69.0-1 → 0.69.0-11

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.
Files changed (51) hide show
  1. package/README.md +17 -58
  2. package/esm/typings/src/_packages/core.index.d.ts +5 -1
  3. package/esm/typings/src/_packages/types.index.d.ts +8 -0
  4. package/esm/typings/src/_packages/utils.index.d.ts +4 -4
  5. package/esm/typings/src/commands/FOREACH/ForeachCommand.d.ts +2 -6
  6. package/esm/typings/src/commands/FOREACH/ForeachJson.d.ts +26 -0
  7. package/esm/typings/src/commands/FOREACH/foreachCommand.test.d.ts +3 -0
  8. package/esm/typings/src/commands/FOREACH/foreachCommandParser.d.ts +2 -1
  9. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -4
  10. package/esm/typings/src/config.d.ts +7 -1
  11. package/esm/typings/src/conversion/prettify/renderPipelineMermaidOptions.d.ts +3 -0
  12. package/esm/typings/src/conversion/utils/extractParameterNamesFromTemplate.d.ts +2 -1
  13. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +5 -0
  14. package/esm/typings/src/execution/PipelineExecutorResult.d.ts +5 -3
  15. package/esm/typings/src/execution/createPipelineExecutor/$OngoingTemplateResult.d.ts +21 -0
  16. package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorOptions.d.ts +20 -0
  17. package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorSettings.d.ts +33 -0
  18. package/esm/typings/src/execution/createPipelineExecutor/00-createPipelineExecutor.d.ts +10 -0
  19. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +55 -0
  20. package/esm/typings/src/execution/createPipelineExecutor/20-executeTemplate.d.ts +62 -0
  21. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatCells.d.ts +21 -0
  22. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +74 -0
  23. package/esm/typings/src/execution/createPipelineExecutor/filterJustOutputParameters.d.ts +34 -0
  24. package/esm/typings/src/execution/createPipelineExecutor/getContextForTemplate.d.ts +10 -0
  25. package/esm/typings/src/execution/createPipelineExecutor/getKnowledgeForTemplate.d.ts +27 -0
  26. package/esm/typings/src/execution/createPipelineExecutor/getReservedParametersForTemplate.d.ts +30 -0
  27. package/esm/typings/src/execution/createPipelineExecutor/getSamplesForTemplate.d.ts +10 -0
  28. package/esm/typings/src/execution/utils/checkExpectations.d.ts +2 -0
  29. package/esm/typings/src/execution/utils/usageToHuman.d.ts +3 -4
  30. package/esm/typings/src/formats/_common/FormatDefinition.d.ts +9 -12
  31. package/esm/typings/src/formats/_common/FormatSubvalueDefinition.d.ts +30 -0
  32. package/esm/typings/src/formats/csv/{ListFormatDefinition.d.ts → CsvFormatDefinition.d.ts} +3 -2
  33. package/esm/typings/src/formats/index.d.ts +1 -1
  34. package/esm/typings/src/formats/json/JsonFormatDefinition.d.ts +1 -1
  35. package/esm/typings/src/formats/text/TextFormatDefinition.d.ts +17 -0
  36. package/esm/typings/src/formats/xml/XmlFormatDefinition.d.ts +1 -1
  37. package/esm/typings/src/types/PipelineJson/ParameterJson.d.ts +1 -0
  38. package/esm/typings/src/types/PipelineJson/TemplateJsonCommon.d.ts +5 -0
  39. package/esm/typings/src/types/execution-report/ExecutionReportJson.d.ts +3 -0
  40. package/esm/typings/src/utils/expectation-counters/index.d.ts +3 -0
  41. package/esm/typings/src/utils/{extractParameterNames.d.ts → parameters/extractParameterNames.d.ts} +2 -2
  42. package/esm/typings/src/utils/parameters/mapAvailableToExpectedParameters.d.ts +27 -0
  43. package/esm/typings/src/utils/{replaceParameters.d.ts → parameters/replaceParameters.d.ts} +2 -2
  44. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +10 -0
  45. package/package.json +2 -2
  46. package/esm/typings/src/execution/createPipelineExecutor.d.ts +0 -72
  47. package/esm/typings/src/formats/list/ListFormatDefinition.d.ts +0 -16
  48. /package/esm/typings/src/utils/{extractParameterNames.test.d.ts → parameters/extractParameterNames.test.d.ts} +0 -0
  49. /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → utils/parameters/mapAvailableToExpectedParameters.test.d.ts} +0 -0
  50. /package/esm/typings/src/utils/{replaceParameters.test.d.ts → parameters/replaceParameters.test.d.ts} +0 -0
  51. /package/esm/typings/src/{execution/utils/usageToHuman.test.d.ts → utils/validators/parameterName/validateParameterName.test.d.ts} +0 -0
package/README.md CHANGED
@@ -65,13 +65,15 @@ Rest of the documentation is common for **entire promptbook ecosystem**:
65
65
 
66
66
  ## 🤍 The Promptbook Whitepaper
67
67
 
68
+
69
+
68
70
  If you have a simple, single prompt for ChatGPT, GPT-4, Anthropic Claude, Google Gemini, Llama 2, or whatever, it doesn't matter how you integrate it. Whether it's calling a REST API directly, using the SDK, hardcoding the prompt into the source code, or importing a text file, the process remains the same.
69
71
 
70
72
  But often you will struggle with the limitations of LLMs, such as hallucinations, off-topic responses, poor quality output, language drift, word repetition repetition repetition repetition or misuse, lack of context, or just plain w𝒆𝐢rd responses. When this happens, you generally have three options:
71
73
 
72
74
  1. **Fine-tune** the model to your specifications or even train your own.
73
75
  2. **Prompt-engineer** the prompt to the best shape you can achieve.
74
- 3. Use **multiple prompts** in a [pipeline](https://github.com/webgptorg/promptbook/discussions/64) to get the best result.
76
+ 3. Orchestrate **multiple prompts** in a [pipeline](https://github.com/webgptorg/promptbook/discussions/64) to get the best result.
75
77
 
76
78
  In all of these situations, but especially in 3., the Promptbook library can make your life easier.
77
79
 
@@ -83,7 +85,9 @@ In all of these situations, but especially in 3., the Promptbook library can mak
83
85
  - Promptbook has built in versioning. You can test multiple **A/B versions** of pipelines and see which one works best.
84
86
  - Promptbook is designed to do [**RAG** (Retrieval-Augmented Generation)](https://github.com/webgptorg/promptbook/discussions/41) and other advanced techniques. You can use **knowledge** to improve the quality of the output.
85
87
 
86
- ## 🧔 Promptbook _(for prompt-engeneers)_
88
+
89
+
90
+ ## 🧔 Pipeline _(for prompt-engeneers)_
87
91
 
88
92
  **P**romp**t** **b**oo**k** markdown file (or `.ptbk.md` file) is document that describes a **pipeline** - a series of prompts that are chained together to form somewhat reciepe for transforming natural language input.
89
93
 
@@ -105,7 +109,6 @@ File `write-website-content.ptbk.md`:
105
109
  > Instructions for creating web page content.
106
110
  >
107
111
  > - PIPELINE URL https://promptbook.studio/webgpt/write-website-content.ptbk.md
108
- > - PROMPTBOOK VERSION 0.0.1
109
112
  > - INPUT  PARAM `{rawTitle}` Automatically suggested a site name or empty text
110
113
  > - INPUT  PARAM `{rawAssigment}` Automatically generated site entry from image recognition
111
114
  > - OUTPUT PARAM `{websiteContent}` Web content
@@ -400,6 +403,8 @@ The following glossary is used to clarify certain concepts:
400
403
  - When you want to **version** your prompts and **test multiple versions**
401
404
  - When you want to **log** the execution of prompts and backtrace the issues
402
405
 
406
+ [See more](https://github.com/webgptorg/promptbook/discussions/111)
407
+
403
408
  ### ➖ When not to use
404
409
 
405
410
  - When you have already implemented single simple prompt and it works fine for your job
@@ -409,6 +414,8 @@ The following glossary is used to clarify certain concepts:
409
414
  - When your main focus is on something other than text - like images, audio, video, spreadsheets _(other media types may be added in the future, [see discussion](https://github.com/webgptorg/promptbook/discussions/103))_
410
415
  - When you need to use recursion _([see the discussion](https://github.com/webgptorg/promptbook/discussions/38))_
411
416
 
417
+ [See more](https://github.com/webgptorg/promptbook/discussions/112)
418
+
412
419
  ## 🐜 Known issues
413
420
 
414
421
  - [🤸‍♂️ Iterations not working yet](https://github.com/webgptorg/promptbook/discussions/55)
@@ -421,63 +428,15 @@ The following glossary is used to clarify certain concepts:
421
428
 
422
429
  ## ❔ FAQ
423
430
 
424
-
425
-
426
431
  If you have a question [start a discussion](https://github.com/webgptorg/promptbook/discussions/), [open an issue](https://github.com/webgptorg/promptbook/issues) or [write me an email](https://www.pavolhejny.com/contact).
427
432
 
428
- ### Why not just use the OpenAI SDK / Anthropic Claude SDK / ...?
429
-
430
- Different levels of abstraction. OpenAI library is for direct use of OpenAI API. This library is for a higher level of abstraction. It define pipelines that are independent of the underlying library, LLM model, or even LLM provider.
431
-
432
- ### How is it different from the Langchain library?
433
-
434
- Langchain is primarily aimed at ML developers working in Python. This library is for developers working in javascript/typescript and creating applications for end users.
435
-
436
- We are considering creating a bridge/converter between these two libraries.
437
-
438
-
439
-
440
- ### Promptbooks vs. OpenAI`s GPTs
441
-
442
- GPTs are chat assistants that can be assigned to specific tasks and materials. But they are still chat assistants. Promptbooks are a way to orchestrate many more predefined tasks to have much tighter control over the process. Promptbooks are not a good technology for creating human-like chatbots, GPTs are not a good technology for creating outputs with specific requirements.
443
-
444
-
445
-
446
-
447
-
448
-
449
-
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
- ### Where should I store my promptbooks?
459
-
460
- If you use raw SDKs, you just put prompts in the sourcecode, mixed in with typescript, javascript, python or whatever programming language you use.
461
-
462
- If you use promptbooks, you can store them in several places, each with its own advantages and disadvantages:
463
-
464
- 1. As **source code**, typically git-committed. In this case you can use the versioning system and the promptbooks will be tightly coupled with the version of the application. You still get the power of promptbooks, as you separate the concerns of the prompt-engineer and the programmer.
465
-
466
- 2. As data in a **database** In this case, promptbooks are like posts / articles on the blog. They can be modified independently of the application. You don't need to redeploy the application to change the promptbooks. You can have multiple versions of promptbooks for each user. You can have a web interface for non-programmers to create and modify promptbooks. But you lose the versioning system and you still have to consider the interface between the promptbooks and the application _(= input and output parameters)_.
467
-
468
- 3. In a **configuration** in environment variables. This is a good way to store promptbooks if you have an application with multiple deployments and you want to have different but simple promptbooks for each deployment and you don't need to change them often.
469
-
470
- ### What should I do when I need same promptbook in multiple human languages?
471
-
472
- A single promptbook can be written for several _(human)_ languages at once. However, we recommend that you have separate promptbooks for each language.
473
-
474
- In large language models, you will get better results if you have prompts in the same language as the user input.
475
-
476
- The best way to manage this is to have suffixed promptbooks like `write-website-content.en.ptbk.md` and `write-website-content.cs.ptbk.md` for each supported language.
477
-
478
-
479
-
480
-
433
+ - [❔ Why not just use the OpenAI SDK / Anthropic Claude SDK / ...?](https://github.com/webgptorg/promptbook/discussions/114)
434
+ - [❔ How is it different from the OpenAI`s GPTs?](https://github.com/webgptorg/promptbook/discussions/118)
435
+ - [❔ How is it different from the Langchain?](https://github.com/webgptorg/promptbook/discussions/115)
436
+ - [❔ How is it different from the DSPy?](https://github.com/webgptorg/promptbook/discussions/117)
437
+ - [❔ How is it different from _anything_?](https://github.com/webgptorg/promptbook/discussions?discussions_q=is%3Aopen+label%3A%22Promptbook+vs%22)
438
+ - [❔ Is Promptbook using RAG _(Retrieval-Augmented Generation)_?](https://github.com/webgptorg/promptbook/discussions/123)
439
+ - [❔ Is Promptbook using function calling?](https://github.com/webgptorg/promptbook/discussions/124)
481
440
 
482
441
  ## ⌚ Changelog
483
442
 
@@ -38,13 +38,15 @@ import { PipelineLogicError } from '../errors/PipelineLogicError';
38
38
  import { PipelineUrlError } from '../errors/PipelineUrlError';
39
39
  import { UnexpectedError } from '../errors/UnexpectedError';
40
40
  import { assertsExecutionSuccessful } from '../execution/assertsExecutionSuccessful';
41
- import { createPipelineExecutor } from '../execution/createPipelineExecutor';
41
+ import { createPipelineExecutor } from '../execution/createPipelineExecutor/00-createPipelineExecutor';
42
42
  import { embeddingVectorToString } from '../execution/embeddingVectorToString';
43
43
  import { ZERO_USAGE } from '../execution/utils/addUsage';
44
44
  import { addUsage } from '../execution/utils/addUsage';
45
45
  import { isPassingExpectations } from '../execution/utils/checkExpectations';
46
46
  import { usageToHuman } from '../execution/utils/usageToHuman';
47
47
  import { usageToWorktime } from '../execution/utils/usageToWorktime';
48
+ import { CsvFormatDefinition } from '../formats/csv/CsvFormatDefinition';
49
+ import { TextFormatDefinition } from '../formats/text/TextFormatDefinition';
48
50
  import { CallbackInterfaceTools } from '../knowledge/dialogs/callback/CallbackInterfaceTools';
49
51
  import type { CallbackInterfaceToolsOptions } from '../knowledge/dialogs/callback/CallbackInterfaceToolsOptions';
50
52
  import { prepareKnowledgePieces } from '../knowledge/prepare-knowledge/_common/prepareKnowledgePieces';
@@ -118,6 +120,8 @@ export { addUsage };
118
120
  export { isPassingExpectations };
119
121
  export { usageToHuman };
120
122
  export { usageToWorktime };
123
+ export { CsvFormatDefinition };
124
+ export { TextFormatDefinition };
121
125
  export { CallbackInterfaceTools };
122
126
  export type { CallbackInterfaceToolsOptions };
123
127
  export { prepareKnowledgePieces };
@@ -7,6 +7,7 @@ import type { PipelineTemplateCommandParser } from '../commands/_common/types/Co
7
7
  import type { CommandParserInput } from '../commands/_common/types/CommandParser';
8
8
  import type { CommandUsagePlace } from '../commands/_common/types/CommandUsagePlaces';
9
9
  import type { ExpectCommand } from '../commands/EXPECT/ExpectCommand';
10
+ import type { ForeachJson } from '../commands/FOREACH/ForeachJson';
10
11
  import type { FormatCommand } from '../commands/FORMAT/FormatCommand';
11
12
  import type { TemplateType } from '../commands/TEMPLATE/TemplateTypes';
12
13
  import type { PipelineStringToJsonOptions } from '../conversion/pipelineStringToJson';
@@ -15,6 +16,8 @@ import type { renderPipelineMermaidOptions } from '../conversion/prettify/render
15
16
  import type { ErrorJson } from '../errors/utils/ErrorJson';
16
17
  import type { AvailableModel } from '../execution/AvailableModel';
17
18
  import type { CommonExecutionToolsOptions } from '../execution/CommonExecutionToolsOptions';
19
+ import type { CreatePipelineExecutorOptions } from '../execution/createPipelineExecutor/00-CreatePipelineExecutorOptions';
20
+ import type { CreatePipelineExecutorSettings } from '../execution/createPipelineExecutor/00-CreatePipelineExecutorSettings';
18
21
  import type { EmbeddingVector } from '../execution/EmbeddingVector';
19
22
  import type { ExecutionTools } from '../execution/ExecutionTools';
20
23
  import type { LlmExecutionTools } from '../execution/LlmExecutionTools';
@@ -32,6 +35,7 @@ import type { ScriptExecutionToolsExecuteOptions } from '../execution/ScriptExec
32
35
  import type { UncertainNumber } from '../execution/UncertainNumber';
33
36
  import type { UserInterfaceTools } from '../execution/UserInterfaceTools';
34
37
  import type { UserInterfaceToolsPromptDialogOptions } from '../execution/UserInterfaceTools';
38
+ import type { FormatSubvalueDefinition } from '../formats/_common/FormatSubvalueDefinition';
35
39
  import type { CallbackInterfaceToolsOptions } from '../knowledge/dialogs/callback/CallbackInterfaceToolsOptions';
36
40
  import type { LlmToolsConfiguration } from '../llm-providers/_common/LlmToolsConfiguration';
37
41
  import type { LlmToolsMetadata } from '../llm-providers/_common/LlmToolsMetadata';
@@ -232,6 +236,7 @@ export type { PipelineTemplateCommandParser };
232
236
  export type { CommandParserInput };
233
237
  export type { CommandUsagePlace };
234
238
  export type { ExpectCommand };
239
+ export type { ForeachJson };
235
240
  export type { FormatCommand };
236
241
  export type { TemplateType };
237
242
  export type { PipelineStringToJsonOptions };
@@ -240,6 +245,8 @@ export type { renderPipelineMermaidOptions };
240
245
  export type { ErrorJson };
241
246
  export type { AvailableModel };
242
247
  export type { CommonExecutionToolsOptions };
248
+ export type { CreatePipelineExecutorOptions };
249
+ export type { CreatePipelineExecutorSettings };
243
250
  export type { EmbeddingVector };
244
251
  export type { ExecutionTools };
245
252
  export type { LlmExecutionTools };
@@ -257,6 +264,7 @@ export type { ScriptExecutionToolsExecuteOptions };
257
264
  export type { UncertainNumber };
258
265
  export type { UserInterfaceTools };
259
266
  export type { UserInterfaceToolsPromptDialogOptions };
267
+ export type { FormatSubvalueDefinition };
260
268
  export type { CallbackInterfaceToolsOptions };
261
269
  export type { LlmToolsConfiguration };
262
270
  export type { LlmToolsMetadata };
@@ -20,7 +20,6 @@ import { splitIntoSentences } from '../utils/expectation-counters/countSentences
20
20
  import { countSentences } from '../utils/expectation-counters/countSentences';
21
21
  import { countWords } from '../utils/expectation-counters/countWords';
22
22
  import { CountUtils } from '../utils/expectation-counters/index';
23
- import { extractParameterNames } from '../utils/extractParameterNames';
24
23
  import { capitalize } from '../utils/normalization/capitalize';
25
24
  import { decapitalize } from '../utils/normalization/decapitalize';
26
25
  import { DIACRITIC_VARIANTS_LETTERS } from '../utils/normalization/DIACRITIC_VARIANTS_LETTERS';
@@ -43,11 +42,12 @@ import { parseKeywords } from '../utils/normalization/parseKeywords';
43
42
  import { parseKeywordsFromString } from '../utils/normalization/parseKeywordsFromString';
44
43
  import { removeDiacritics } from '../utils/normalization/removeDiacritics';
45
44
  import { searchKeywords } from '../utils/normalization/searchKeywords';
45
+ import { extractParameterNames } from '../utils/parameters/extractParameterNames';
46
+ import { replaceParameters } from '../utils/parameters/replaceParameters';
46
47
  import { parseNumber } from '../utils/parseNumber';
47
48
  import { $randomSeed } from '../utils/random/$randomSeed';
48
49
  import { removeEmojis } from '../utils/removeEmojis';
49
50
  import { removeQuotes } from '../utils/removeQuotes';
50
- import { replaceParameters } from '../utils/replaceParameters';
51
51
  import { $deepFreeze } from '../utils/serialization/$deepFreeze';
52
52
  import { checkSerializableAsJson } from '../utils/serialization/checkSerializableAsJson';
53
53
  import { clonePipeline } from '../utils/serialization/clonePipeline';
@@ -91,7 +91,6 @@ export { splitIntoSentences };
91
91
  export { countSentences };
92
92
  export { countWords };
93
93
  export { CountUtils };
94
- export { extractParameterNames };
95
94
  export { capitalize };
96
95
  export { decapitalize };
97
96
  export { DIACRITIC_VARIANTS_LETTERS };
@@ -114,11 +113,12 @@ export { parseKeywords };
114
113
  export { parseKeywordsFromString };
115
114
  export { removeDiacritics };
116
115
  export { searchKeywords };
116
+ export { extractParameterNames };
117
+ export { replaceParameters };
117
118
  export { parseNumber };
118
119
  export { $randomSeed };
119
120
  export { removeEmojis };
120
121
  export { removeQuotes };
121
- export { replaceParameters };
122
122
  export { $deepFreeze };
123
123
  export { checkSerializableAsJson };
124
124
  export { clonePipeline };
@@ -1,5 +1,4 @@
1
- import type { string_parameter_name } from '../../types/typeAliases';
2
- import type { TODO_string } from '../../utils/organization/TODO_string';
1
+ import type { ForeachJson } from './ForeachJson';
3
2
  /**
4
3
  * Parsed FOREACH command <- Write [🍭] !!!!!!
5
4
  *
@@ -8,7 +7,4 @@ import type { TODO_string } from '../../utils/organization/TODO_string';
8
7
  */
9
8
  export type ForeachCommand = {
10
9
  readonly type: 'FOREACH';
11
- formatName: TODO_string;
12
- cellName: TODO_string;
13
- parameterName: string_parameter_name;
14
- };
10
+ } & ForeachJson;
@@ -0,0 +1,26 @@
1
+ import type { string_parameter_name } from '../../types/typeAliases';
2
+ import type { TODO_string } from '../../utils/organization/TODO_string';
3
+ /**
4
+ * @@@
5
+ */
6
+ export type ForeachJson = {
7
+ /**
8
+ * @@@
9
+ */
10
+ readonly formatName: TODO_string;
11
+ /**
12
+ * @@@
13
+ */
14
+ readonly cellName: TODO_string;
15
+ /**
16
+ * @@@
17
+ */
18
+ readonly parameterName: string_parameter_name;
19
+ /**
20
+ * @@@
21
+ */
22
+ readonly subparameterNames: Array<string_parameter_name>;
23
+ };
24
+ /**
25
+ * TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
26
+ */
@@ -1 +1,4 @@
1
1
  export {};
2
+ /**
3
+ * TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
4
+ */
@@ -10,6 +10,7 @@ import type { ForeachCommand } from './ForeachCommand';
10
10
  */
11
11
  export declare const foreachCommandParser: PipelineTemplateCommandParser<ForeachCommand>;
12
12
  /**
13
- * TODO: !!!!!! Comment console logs
13
+ * TODO: !!!!!! Remove console logs
14
+ * TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
14
15
  * TODO: [🍭] !!!!!! Make .ptbk.md file with examples of the FOREACH command and also with wrong parsing and logic
15
16
  */
@@ -156,28 +156,28 @@ export type CommandParserInput = {
156
156
  * @@@
157
157
  *
158
158
  * @example 'promptbook version 0.62.0'
159
- * @example 'FOREACH List Line -> `{customer}`'
159
+ * @example 'FOREACH Text Line `{customers}` -> `{customer}`'
160
160
  */
161
161
  readonly raw: string_markdown_text;
162
162
  /**
163
163
  * @@@
164
164
  *
165
165
  * @example '0.62.0'
166
- * @example 'List Line -> `{customer}`'
166
+ * @example 'List Line `{customers}` -> `{customer}`'
167
167
  */
168
168
  readonly rawArgs: string_markdown_text;
169
169
  /**
170
170
  * @@@
171
171
  *
172
172
  * @example 'PROMPTBOOK_VERSION_0_62_0'
173
- * @example 'FOREACH_LIST_LINE_CUSTOMER'
173
+ * @example 'FOREACH_LIST_LINE_CUSTOMERS_CUSTOMER'
174
174
  */
175
175
  readonly normalized: string_name & string_SCREAMING_CASE;
176
176
  /**
177
177
  * @@@
178
178
  *
179
179
  * @example [ '0.62.0' ]
180
- * @example [ 'List', 'Line', '', '{customer}' ]
180
+ * @example [ 'List', 'Line', '{customers}', '', '{customer}' ]
181
181
  */
182
182
  readonly args: Array<string_name>;
183
183
  };
@@ -148,7 +148,13 @@ export declare const IS_VERBOSE = false;
148
148
  *
149
149
  * @private within the repository
150
150
  */
151
- export declare const DEBUG_ALLOW_PAYED_TESTING: boolean;
151
+ export declare const IS_PIPELINE_LOGIC_VALIDATED: boolean;
152
+ /**
153
+ * @@@
154
+ *
155
+ * @private within the repository
156
+ */
157
+ export declare const IS_COST_PREVENTED: boolean;
152
158
  /**
153
159
  * TODO: [🧠][🧜‍♂️] Maybe join remoteUrl and path into single value
154
160
  */
@@ -22,6 +22,9 @@ export type renderPipelineMermaidOptions = {
22
22
  */
23
23
  export declare function renderPromptbookMermaid(pipelineJson: PipelineJson, options?: renderPipelineMermaidOptions): string;
24
24
  /**
25
+ * TODO: !!!!!! FOREACH in mermaid graph
26
+ * TODO: !!!!!! Knowledge in mermaid graph
27
+ * TODO: !!!!!! Personas in mermaid graph
25
28
  * TODO: Maybe use some Mermaid package instead of string templating
26
29
  * TODO: [🕌] When more than 2 functionalities, split into separate functions
27
30
  */
@@ -1,3 +1,4 @@
1
+ import type { ReadonlyDeep } from 'type-fest';
1
2
  import type { TemplateJson } from '../../types/PipelineJson/TemplateJson';
2
3
  import type { string_parameter_name } from '../../types/typeAliases';
3
4
  /**
@@ -8,7 +9,7 @@ import type { string_parameter_name } from '../../types/typeAliases';
8
9
  * @throws {ParseError} if the script is invalid
9
10
  * @public exported from `@promptbook/utils`
10
11
  */
11
- export declare function extractParameterNamesFromTemplate(template: Pick<TemplateJson, 'title' | 'description' | 'templateType' | 'content' | 'preparedContent' | 'jokerParameterNames'>): Set<string_parameter_name>;
12
+ export declare function extractParameterNamesFromTemplate(template: ReadonlyDeep<Pick<TemplateJson, 'title' | 'description' | 'templateType' | 'content' | 'preparedContent' | 'jokerParameterNames' | 'foreach'>>): Set<string_parameter_name>;
12
13
  /**
13
14
  * TODO: [🔣] If script require contentLanguage
14
15
  */
@@ -16,6 +16,11 @@ import type { PipelineJson } from '../../types/PipelineJson/PipelineJson';
16
16
  */
17
17
  export declare function validatePipeline(pipeline: PipelineJson): PipelineJson;
18
18
  /**
19
+ * @private internal function for `validatePipeline`
20
+ */
21
+ export declare function validatePipelineCore(pipeline: PipelineJson): void;
22
+ /**
23
+ * TODO: !!!!!! [🧞‍♀️] Do not allow joker + foreach
19
24
  * TODO: [🧠] Work with promptbookVersion
20
25
  * TODO: Use here some json-schema, Zod or something similar and change it to:
21
26
  * > /**
@@ -1,7 +1,8 @@
1
+ import { ReadonlyDeep } from 'type-fest';
2
+ import type { ErrorJson } from '../errors/utils/ErrorJson';
1
3
  import type { ExecutionReportJson } from '../types/execution-report/ExecutionReportJson';
2
- import type { Parameters } from '../types/typeAliases';
3
4
  import type { PipelineJson } from '../types/PipelineJson/PipelineJson';
4
- import type { ErrorJson } from '../errors/utils/ErrorJson';
5
+ import type { Parameters } from '../types/typeAliases';
5
6
  import type { PromptResultUsage } from './PromptResultUsage';
6
7
  /**
7
8
  * @@@
@@ -41,9 +42,10 @@ export type PipelineExecutorResult = {
41
42
  * Note: If you called `createPipelineExecutor` with fully prepared pipeline, this is the same object as this pipeline
42
43
  * If you passed not fully prepared pipeline, this is same pipeline but fully prepared
43
44
  */
44
- readonly preparedPipeline: PipelineJson;
45
+ readonly preparedPipeline: ReadonlyDeep<PipelineJson>;
45
46
  };
46
47
  /**
48
+ * TODO: !!!!!! Maybe add ReadonlyDeep< to all
47
49
  * TODO: [🧠] Should this file be in /execution or /types folder?
48
50
  * TODO: [🧠] Maybe constrain `ErrorJson` -> `ErrorJson & { name: 'PipelineExecutionError' | 'Error' }`
49
51
  */
@@ -0,0 +1,21 @@
1
+ import { ExpectError } from '../../errors/ExpectError';
2
+ import type { Prompt } from '../../types/Prompt';
3
+ import type { ChatPromptResult } from '../PromptResult';
4
+ import type { CompletionPromptResult } from '../PromptResult';
5
+ import type { EmbeddingPromptResult } from '../PromptResult';
6
+ import type { PromptResult } from '../PromptResult';
7
+ /**
8
+ * @@@
9
+ *
10
+ * @private internal utility of `createPipelineExecutor`
11
+ */
12
+ export type $OngoingTemplateResult = {
13
+ $prompt?: Prompt;
14
+ $chatResult?: ChatPromptResult;
15
+ $completionResult?: CompletionPromptResult;
16
+ $embeddingResult?: EmbeddingPromptResult;
17
+ $result: PromptResult | null;
18
+ $resultString: string | null;
19
+ $expectError: ExpectError | null;
20
+ $scriptPipelineExecutionErrors: Array<Error>;
21
+ };
@@ -0,0 +1,20 @@
1
+ import type { PipelineJson } from '../../types/PipelineJson/PipelineJson';
2
+ import type { ExecutionTools } from '../ExecutionTools';
3
+ import type { CreatePipelineExecutorSettings } from './00-CreatePipelineExecutorSettings';
4
+ /**
5
+ * Options for `createPipelineExecutor`
6
+ */
7
+ export interface CreatePipelineExecutorOptions {
8
+ /**
9
+ * The pipeline to be executed
10
+ */
11
+ readonly pipeline: PipelineJson;
12
+ /**
13
+ * The execution tools to be used during the execution of the pipeline
14
+ */
15
+ readonly tools: ExecutionTools;
16
+ /**
17
+ * Optional settings for the pipeline executor
18
+ */
19
+ readonly settings?: Partial<CreatePipelineExecutorSettings>;
20
+ }
@@ -0,0 +1,33 @@
1
+ export type CreatePipelineExecutorSettings = {
2
+ /**
3
+ * When executor does not satisfy expectations it will be retried this amount of times
4
+ *
5
+ * @default MAX_EXECUTION_ATTEMPTS
6
+ */
7
+ readonly maxExecutionAttempts: number;
8
+ /**
9
+ * Maximum number of tasks running in parallel
10
+ *
11
+ * @default MAX_PARALLEL_COUNT
12
+ */
13
+ readonly maxParallelCount: number;
14
+ /**
15
+ * If true, the preparation logs additional information
16
+ *
17
+ * @default false
18
+ */
19
+ readonly isVerbose: boolean;
20
+ /**
21
+ * If you pass fully prepared pipeline, this does not matter
22
+ *
23
+ * Otherwise:
24
+ * If false or not set, warning is shown when pipeline is not prepared
25
+ * If true, warning is suppressed
26
+ *
27
+ * @default false
28
+ */
29
+ readonly isNotPreparedWarningSupressed: boolean;
30
+ };
31
+ /**
32
+ * TODO: [🤹‍♂️] More granular setting for limits of execution + better waiting for queue
33
+ */
@@ -0,0 +1,10 @@
1
+ import type { PipelineExecutor } from '../PipelineExecutor';
2
+ import type { CreatePipelineExecutorOptions } from './00-CreatePipelineExecutorOptions';
3
+ /**
4
+ * Creates executor function from pipeline and execution tools.
5
+ *
6
+ * @returns The executor function
7
+ * @throws {PipelineLogicError} on logical error in the pipeline
8
+ * @public exported from `@promptbook/core`
9
+ */
10
+ export declare function createPipelineExecutor(options: CreatePipelineExecutorOptions): PipelineExecutor;
@@ -0,0 +1,55 @@
1
+ import type { Promisable, ReadonlyDeep } from 'type-fest';
2
+ import type { PipelineJson } from '../../types/PipelineJson/PipelineJson';
3
+ import type { TaskProgress } from '../../types/TaskProgress';
4
+ import type { Parameters } from '../../types/typeAliases';
5
+ import type { ExecutionTools } from '../ExecutionTools';
6
+ import type { PipelineExecutorResult } from '../PipelineExecutorResult';
7
+ import type { CreatePipelineExecutorSettings } from './00-CreatePipelineExecutorSettings';
8
+ /**
9
+ * @@@
10
+ *
11
+ * @private internal type of `executePipelinex`
12
+ */
13
+ type ExecutePipelineOptions = {
14
+ /**
15
+ * @@@
16
+ */
17
+ readonly inputParameters: Readonly<Parameters>;
18
+ /**
19
+ * @@@
20
+ */
21
+ readonly tools: ExecutionTools;
22
+ /**
23
+ * @@@
24
+ */
25
+ readonly onProgress?: (taskProgress: TaskProgress) => Promisable<void>;
26
+ /**
27
+ * @@@
28
+ */
29
+ readonly pipeline: PipelineJson;
30
+ /**
31
+ * @@@
32
+ */
33
+ readonly preparedPipeline: ReadonlyDeep<PipelineJson>;
34
+ /**
35
+ * @@@
36
+ */
37
+ readonly setPreparedPipeline: (preparedPipeline: ReadonlyDeep<PipelineJson>) => void;
38
+ /**
39
+ * @@@
40
+ */
41
+ readonly pipelineIdentification: string;
42
+ /**
43
+ * Settings for the pipeline executor
44
+ */
45
+ readonly settings: CreatePipelineExecutorSettings;
46
+ };
47
+ /**
48
+ * @@@
49
+ *
50
+ * Note: This is not a `PipelineExecutor` (which is binded with one exact pipeline), but a utility function of `createPipelineExecutor` which creates `PipelineExecutor`
51
+ *
52
+ * @private internal utility of `createPipelineExecutor`
53
+ */
54
+ export declare function executePipeline(options: ExecutePipelineOptions): Promise<PipelineExecutorResult>;
55
+ export {};
@@ -0,0 +1,62 @@
1
+ import { Promisable, ReadonlyDeep } from 'type-fest';
2
+ import { MultipleLlmExecutionTools } from '../../llm-providers/multiple/MultipleLlmExecutionTools';
3
+ import type { ExecutionReportJson } from '../../types/execution-report/ExecutionReportJson';
4
+ import type { PipelineJson } from '../../types/PipelineJson/PipelineJson';
5
+ import type { TemplateJson } from '../../types/PipelineJson/TemplateJson';
6
+ import type { TaskProgress } from '../../types/TaskProgress';
7
+ import type { Parameters } from '../../types/typeAliases';
8
+ import type { ExecutionTools } from '../ExecutionTools';
9
+ import type { CreatePipelineExecutorSettings } from './00-CreatePipelineExecutorSettings';
10
+ /**
11
+ * @@@
12
+ *
13
+ * @private internal type of `executeTemplate`
14
+ */
15
+ type executeSingleTemplateOptions = {
16
+ /**
17
+ * @@@
18
+ */
19
+ readonly currentTemplate: ReadonlyDeep<TemplateJson>;
20
+ /**
21
+ * @@@
22
+ */
23
+ readonly preparedPipeline: ReadonlyDeep<PipelineJson>;
24
+ /**
25
+ * @@@
26
+ */
27
+ readonly parametersToPass: Readonly<Parameters>;
28
+ /**
29
+ * @@@
30
+ */
31
+ readonly tools: Omit<ExecutionTools, 'llm'>;
32
+ /**
33
+ * @@@
34
+ */
35
+ readonly llmTools: MultipleLlmExecutionTools;
36
+ /**
37
+ * @@@
38
+ */
39
+ readonly onProgress: (taskProgress: TaskProgress) => Promisable<void>;
40
+ /**
41
+ * Settings for the pipeline executor
42
+ */
43
+ readonly settings: CreatePipelineExecutorSettings;
44
+ /**
45
+ * @@@
46
+ */
47
+ readonly $executionReport: ExecutionReportJson;
48
+ /**
49
+ * @@@
50
+ */
51
+ readonly pipelineIdentification: string;
52
+ };
53
+ /**
54
+ * @@@
55
+ *
56
+ * @private internal utility of `createPipelineExecutor`
57
+ */
58
+ export declare function executeTemplate(options: executeSingleTemplateOptions): Promise<Readonly<Parameters>>;
59
+ export {};
60
+ /**
61
+ * TODO: [🤹‍♂️]
62
+ */
@@ -0,0 +1,21 @@
1
+ import type { TODO_any } from '../../utils/organization/TODO_any';
2
+ import type { ExecuteAttemptsOptions } from './40-executeAttempts';
3
+ /**
4
+ * @@@
5
+ *
6
+ * @private internal type of `executeFormatCells`
7
+ */
8
+ type ExecuteFormatCellsOptions = ExecuteAttemptsOptions;
9
+ /**
10
+ * @@@
11
+ *
12
+ * @private internal utility of `createPipelineExecutor`
13
+ */
14
+ export declare function executeFormatCells(options: ExecuteFormatCellsOptions): Promise<TODO_any>;
15
+ export {};
16
+ /**
17
+ * TODO: !!!!!! Make pipelineIdentification more precise
18
+ * TODO: !!!!!! How FOREACH execution looks in the report
19
+ * TODO: [🧠][🦥] Better (less confusing) name for "cell" / "subvalue" / "subparameter"
20
+ * TODO: []
21
+ */