@promptbook/core 0.61.0-20 → 0.61.0-22

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.
@@ -40,4 +40,5 @@ export type PipelineExecutor = {
40
40
  };
41
41
  /**
42
42
  * TODO: [🧠] Should this file be in /execution or /types folder?
43
+ * TODO: [💷] !!!! `assertsExecutionSuccessful` should be the method of `PipelineExecutor` result
43
44
  */
@@ -55,4 +55,5 @@ export {};
55
55
  * Note: CreatePipelineExecutorOptions are just connected to PipelineExecutor so do not extract to types folder
56
56
  * TODO: [🧠][3] transparent = (report intermediate parameters) / opaque execution = (report only output parameters) progress reporting mode
57
57
  * TODO: [🛠] Actions, instruments (and maybe knowledge) => Functions and tools
58
+ * TODO: [💷] !!!! `assertsExecutionSuccessful` should be the method of `PipelineExecutor` result
58
59
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/core",
3
- "version": "0.61.0-20",
3
+ "version": "0.61.0-22",
4
4
  "description": "Supercharge your use of large language models",
5
5
  "private": false,
6
6
  "sideEffects": false,
package/umd/index.umd.js CHANGED
@@ -855,7 +855,9 @@
855
855
  return template.dependentParameterNames.every(function (name) { return resovedParameters.includes(name); });
856
856
  });
857
857
  if (currentlyResovedTemplates.length === 0) {
858
- throw new PipelineLogicError(spaceTrim.spaceTrim(function (block) { return "\n\n Can not resolve some parameters:\n Either you are using a parameter that is not defined, or there are some circular dependencies.\n\n Can not resolve:\n ".concat(block(unresovedTemplates
858
+ throw new PipelineLogicError(
859
+ // TODO: [🐎] DRY
860
+ spaceTrim.spaceTrim(function (block) { return "\n\n Can not resolve some parameters:\n Either you are using a parameter that is not defined, or there are some circular dependencies.\n\n Can not resolve:\n ".concat(block(unresovedTemplates
859
861
  .map(function (_a) {
860
862
  var resultingParameterName = _a.resultingParameterName, dependentParameterNames = _a.dependentParameterNames;
861
863
  return "- Parameter {".concat(resultingParameterName, "} which depends on ").concat(dependentParameterNames
@@ -1452,7 +1454,7 @@
1452
1454
  });
1453
1455
  }
1454
1456
 
1455
- var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.ptbk.md",promptbookVersion:"0.61.0-19",parameters:[{name:"content",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledge",description:"The knowledge JSON object",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",dependentParameterNames:["content"],resultingParameterName:"knowledge"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-19",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-from-markdown.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.ptbk.md",promptbookVersion:"0.61.0-19",parameters:[{name:"content",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",dependentParameterNames:["content"],resultingParameterName:"keywords"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-19",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-keywords.ptbk.md"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.ptbk.md",promptbookVersion:"0.61.0-19",parameters:[{name:"content",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",expectations:{words:{min:1,max:8}},dependentParameterNames:["content"],resultingParameterName:"title"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-19",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-title.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.ptbk.md",promptbookVersion:"0.61.0-19",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}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"make-model-requirements",title:"Make modelRequirements",modelRequirements:{modelVariant:"CHAT",modelName:"gpt-4-turbo"},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### Option `modelName`\n\nPick from the following models:\n\n- {availableModelNames}\n\n### Option `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### Option `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}",expectFormat:"JSON",dependentParameterNames:["availableModelNames","personaDescription"],resultingParameterName:"modelRequirements"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-19",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-persona.ptbk.md"}];
1457
+ var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.ptbk.md",promptbookVersion:"0.61.0-21",parameters:[{name:"content",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledge",description:"The knowledge JSON object",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",dependentParameterNames:["content"],resultingParameterName:"knowledge"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-21",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-from-markdown.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.ptbk.md",promptbookVersion:"0.61.0-21",parameters:[{name:"content",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",dependentParameterNames:["content"],resultingParameterName:"keywords"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-21",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-keywords.ptbk.md"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.ptbk.md",promptbookVersion:"0.61.0-21",parameters:[{name:"content",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"knowledge",title:"Knowledge",modelRequirements:{modelVariant:"CHAT",modelName:"claude-3-opus-20240229"},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> {content}",expectations:{words:{min:1,max:8}},dependentParameterNames:["content"],resultingParameterName:"title"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-21",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-knowledge-title.ptbk.md"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.ptbk.md",promptbookVersion:"0.61.0-21",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}],promptTemplates:[{blockType:"PROMPT_TEMPLATE",name:"make-model-requirements",title:"Make modelRequirements",modelRequirements:{modelVariant:"CHAT",modelName:"gpt-4-turbo"},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### Option `modelName`\n\nPick from the following models:\n\n- {availableModelNames}\n\n### Option `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### Option `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}",expectFormat:"JSON",dependentParameterNames:["availableModelNames","personaDescription"],resultingParameterName:"modelRequirements"}],knowledgeSources:[],knowledgePieces:[],personas:[],preparations:[{id:1,promptbookVersion:"0.61.0-21",modelUsage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],sourceFile:"./promptbook-collection/prepare-persona.ptbk.md"}];
1456
1458
 
1457
1459
  var defaultDiacriticsRemovalMap = [
1458
1460
  {
@@ -1825,7 +1827,11 @@
1825
1827
  throw errors[0];
1826
1828
  }
1827
1829
  else {
1828
- throw new PipelineExecutionError(spaceTrim.spaceTrim(function (block) { return "\n Multiple errors occurred during promptnook execution\n\n ".concat(block(errors.map(function (error) { return '- ' + error.message; }).join('\n')), "\n "); }));
1830
+ throw new PipelineExecutionError(spaceTrim.spaceTrim(function (block) { return "\n Multiple errors occurred during promptnook execution\n\n ".concat(block(errors
1831
+ .map(function (error, index) {
1832
+ return spaceTrim.spaceTrim(function (block) { return "\n Error ".concat(index + 1, ":\n ").concat(block(error.stack || error.message), "\n "); });
1833
+ })
1834
+ .join('\n')), "\n "); }));
1829
1835
  }
1830
1836
  }
1831
1837
  /**
@@ -2446,7 +2452,7 @@
2446
2452
  /**
2447
2453
  * The version of the Promptbook library
2448
2454
  */
2449
- var PROMPTBOOK_VERSION = '0.61.0-19';
2455
+ var PROMPTBOOK_VERSION = '0.61.0-21';
2450
2456
  // TODO: !!!! List here all the versions and annotate + put into script
2451
2457
 
2452
2458
  /**
@@ -3100,7 +3106,34 @@
3100
3106
  });
3101
3107
  });
3102
3108
  }
3103
- var executionReport, _a, _b, parameter, parametersToPass, resovedParameters_1, unresovedTemplates_1, resolving_1, loopLimit, _loop_1, error_1, usage_1, outputParameters, errors, _c, _d, parameter, usage;
3109
+ function filterJustOutputParameters() {
3110
+ var e_9, _a;
3111
+ var outputParameters = {};
3112
+ try {
3113
+ // Note: Filter ONLY output parameters
3114
+ for (var _b = __values(pipeline.parameters.filter(function (_a) {
3115
+ var isOutput = _a.isOutput;
3116
+ return isOutput;
3117
+ })), _c = _b.next(); !_c.done; _c = _b.next()) {
3118
+ var parameter = _c.value;
3119
+ if (parametersToPass[parameter.name] === undefined) {
3120
+ // [4]
3121
+ errors.push(new PipelineExecutionError("Parameter {".concat(parameter.name, "} should be an output parameter, but it was not be resolved")));
3122
+ continue;
3123
+ }
3124
+ outputParameters[parameter.name] = parametersToPass[parameter.name] || '';
3125
+ }
3126
+ }
3127
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
3128
+ finally {
3129
+ try {
3130
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
3131
+ }
3132
+ finally { if (e_9) throw e_9.error; }
3133
+ }
3134
+ return outputParameters;
3135
+ }
3136
+ var executionReport, _a, _b, parameter, errors, _loop_1, _c, _d, parameterName, state_1, parametersToPass, resovedParameterNames_1, unresovedTemplates_1, resolving_1, loopLimit, _loop_2, error_1, usage_1, outputParameters_1, usage, outputParameters;
3104
3137
  var e_1, _e, e_2, _f;
3105
3138
  return __generator(this, function (_g) {
3106
3139
  switch (_g.label) {
@@ -3125,9 +3158,12 @@
3125
3158
  };
3126
3159
  try {
3127
3160
  // Note: Check that all input input parameters are defined
3128
- for (_a = __values(pipeline.parameters), _b = _a.next(); !_b.done; _b = _a.next()) {
3161
+ for (_a = __values(pipeline.parameters.filter(function (_a) {
3162
+ var isInput = _a.isInput;
3163
+ return isInput;
3164
+ })), _b = _a.next(); !_b.done; _b = _a.next()) {
3129
3165
  parameter = _b.value;
3130
- if (parameter.isInput && inputParameters[parameter.name] === undefined) {
3166
+ if (inputParameters[parameter.name] === undefined) {
3131
3167
  return [2 /*return*/, deepFreezeWithSameType({
3132
3168
  isSuccessful: false,
3133
3169
  errors: [
@@ -3148,11 +3184,49 @@
3148
3184
  }
3149
3185
  finally { if (e_1) throw e_1.error; }
3150
3186
  }
3187
+ errors = [];
3188
+ _loop_1 = function (parameterName) {
3189
+ var parameter = pipeline.parameters.find(function (_a) {
3190
+ var name = _a.name;
3191
+ return name === parameterName;
3192
+ });
3193
+ if (parameter === undefined) {
3194
+ errors.push(new PipelineExecutionError("Extra parameter {".concat(parameterName, "} is passed as input parameter")));
3195
+ }
3196
+ else if (parameter.isInput === false) {
3197
+ return { value: deepFreezeWithSameType({
3198
+ isSuccessful: false,
3199
+ errors: [
3200
+ new PipelineExecutionError("Parameter {".concat(parameter.name, "} is passed as input parameter but is not input")),
3201
+ // <- TODO: !!!!! Test this error
3202
+ ],
3203
+ executionReport: executionReport,
3204
+ outputParameters: {},
3205
+ usage: ZERO_USAGE,
3206
+ }) };
3207
+ }
3208
+ };
3209
+ try {
3210
+ // Note: Check that no extra input parameters are passed
3211
+ for (_c = __values(Object.keys(inputParameters)), _d = _c.next(); !_d.done; _d = _c.next()) {
3212
+ parameterName = _d.value;
3213
+ state_1 = _loop_1(parameterName);
3214
+ if (typeof state_1 === "object")
3215
+ return [2 /*return*/, state_1.value];
3216
+ }
3217
+ }
3218
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
3219
+ finally {
3220
+ try {
3221
+ if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
3222
+ }
3223
+ finally { if (e_2) throw e_2.error; }
3224
+ }
3151
3225
  parametersToPass = inputParameters;
3152
3226
  _g.label = 3;
3153
3227
  case 3:
3154
3228
  _g.trys.push([3, 8, , 9]);
3155
- resovedParameters_1 = pipeline.parameters
3229
+ resovedParameterNames_1 = pipeline.parameters
3156
3230
  .filter(function (_a) {
3157
3231
  var isInput = _a.isInput;
3158
3232
  return isInput;
@@ -3164,7 +3238,7 @@
3164
3238
  unresovedTemplates_1 = __spreadArray([], __read(pipeline.promptTemplates), false);
3165
3239
  resolving_1 = [];
3166
3240
  loopLimit = LOOP_LIMIT;
3167
- _loop_1 = function () {
3241
+ _loop_2 = function () {
3168
3242
  var currentTemplate, work_1;
3169
3243
  return __generator(this, function (_h) {
3170
3244
  switch (_h.label) {
@@ -3174,15 +3248,21 @@
3174
3248
  throw new UnexpectedError('Loop limit reached during resolving parameters pipeline execution');
3175
3249
  }
3176
3250
  currentTemplate = unresovedTemplates_1.find(function (template) {
3177
- return template.dependentParameterNames.every(function (name) { return resovedParameters_1.includes(name); });
3251
+ return template.dependentParameterNames.every(function (name) {
3252
+ return __spreadArray(__spreadArray([], __read(resovedParameterNames_1), false), __read(RESERVED_PARAMETER_NAMES), false).includes(name);
3253
+ });
3178
3254
  });
3179
3255
  if (!(!currentTemplate && resolving_1.length === 0)) return [3 /*break*/, 1];
3180
- throw new UnexpectedError(spaceTrim.spaceTrim(function (block) { return "\n Can not resolve some parameters\n\n Note: This should be catched in `validatePipeline`\n\n\n Unresolved parameters:\n ".concat(block(unresovedTemplates_1
3256
+ throw new UnexpectedError(
3257
+ // TODO: [🐎] DRY
3258
+ spaceTrim.spaceTrim(function (block) { return "\n Can not resolve some parameters:\n\n Can not resolve:\n ".concat(block(unresovedTemplates_1
3181
3259
  .map(function (_a) {
3182
- var resultingParameterName = _a.resultingParameterName;
3183
- return "- {".concat(resultingParameterName, "}");
3260
+ var resultingParameterName = _a.resultingParameterName, dependentParameterNames = _a.dependentParameterNames;
3261
+ return "- Parameter {".concat(resultingParameterName, "} which depends on ").concat(dependentParameterNames
3262
+ .map(function (dependentParameterName) { return "{".concat(dependentParameterName, "}"); })
3263
+ .join(' and '));
3184
3264
  })
3185
- .join('\n')), "\n\n Resolved parameters:\n ").concat(block(resovedParameters_1.map(function (name) { return "- {".concat(name, "}"); }).join('\n')), "\n "); }));
3265
+ .join('\n')), "\n\n Resolved:\n ").concat(block(resovedParameterNames_1.map(function (name) { return "- Parameter {".concat(name, "}"); }).join('\n')), "\n\n Note: This should be catched in `validatePipeline`\n "); }));
3186
3266
  case 1:
3187
3267
  if (!!currentTemplate) return [3 /*break*/, 3];
3188
3268
  /* [5] */ return [4 /*yield*/, Promise.race(resolving_1)];
@@ -3193,7 +3273,7 @@
3193
3273
  unresovedTemplates_1 = unresovedTemplates_1.filter(function (template) { return template !== currentTemplate; });
3194
3274
  work_1 = executeSingleTemplate(currentTemplate)
3195
3275
  .then(function () {
3196
- resovedParameters_1 = __spreadArray(__spreadArray([], __read(resovedParameters_1), false), [currentTemplate.resultingParameterName], false);
3276
+ resovedParameterNames_1 = __spreadArray(__spreadArray([], __read(resovedParameterNames_1), false), [currentTemplate.resultingParameterName], false);
3197
3277
  })
3198
3278
  .then(function () {
3199
3279
  resolving_1 = resolving_1.filter(function (w) { return w !== work_1; });
@@ -3207,7 +3287,7 @@
3207
3287
  _g.label = 4;
3208
3288
  case 4:
3209
3289
  if (!(unresovedTemplates_1.length > 0)) return [3 /*break*/, 6];
3210
- return [5 /*yield**/, _loop_1()];
3290
+ return [5 /*yield**/, _loop_2()];
3211
3291
  case 5:
3212
3292
  _g.sent();
3213
3293
  return [3 /*break*/, 4];
@@ -3224,41 +3304,20 @@
3224
3304
  var result = _a.result;
3225
3305
  return (result === null || result === void 0 ? void 0 : result.usage) || ZERO_USAGE;
3226
3306
  })), false));
3307
+ outputParameters_1 = filterJustOutputParameters();
3227
3308
  return [2 /*return*/, deepFreezeWithSameType({
3228
3309
  isSuccessful: false,
3229
- errors: [error_1],
3310
+ errors: __spreadArray([error_1], __read(errors), false),
3230
3311
  usage: usage_1,
3231
3312
  executionReport: executionReport,
3232
- outputParameters: parametersToPass,
3313
+ outputParameters: outputParameters_1,
3233
3314
  })];
3234
3315
  case 9:
3235
- outputParameters = {};
3236
- errors = [];
3237
- try {
3238
- // Note: Filter ONLY output parameters
3239
- for (_c = __values(pipeline.parameters.filter(function (_a) {
3240
- var isOutput = _a.isOutput;
3241
- return isOutput;
3242
- })), _d = _c.next(); !_d.done; _d = _c.next()) {
3243
- parameter = _d.value;
3244
- if (parametersToPass[parameter.name] === undefined) {
3245
- errors.push(new PipelineExecutionError("Parameter {".concat(parameter.name, "} is required as an output parameter but not set in the pipeline")));
3246
- continue;
3247
- }
3248
- outputParameters[parameter.name] = parametersToPass[parameter.name] || '';
3249
- }
3250
- }
3251
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
3252
- finally {
3253
- try {
3254
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
3255
- }
3256
- finally { if (e_2) throw e_2.error; }
3257
- }
3258
3316
  usage = addUsage.apply(void 0, __spreadArray([], __read(executionReport.promptExecutions.map(function (_a) {
3259
3317
  var result = _a.result;
3260
3318
  return (result === null || result === void 0 ? void 0 : result.usage) || ZERO_USAGE;
3261
3319
  })), false));
3320
+ outputParameters = filterJustOutputParameters();
3262
3321
  return [2 /*return*/, deepFreezeWithSameType({
3263
3322
  isSuccessful: true,
3264
3323
  errors: errors,
@@ -3280,6 +3339,7 @@
3280
3339
  * Note: CreatePipelineExecutorOptions are just connected to PipelineExecutor so do not extract to types folder
3281
3340
  * TODO: [🧠][3] transparent = (report intermediate parameters) / opaque execution = (report only output parameters) progress reporting mode
3282
3341
  * TODO: [🛠] Actions, instruments (and maybe knowledge) => Functions and tools
3342
+ * TODO: [💷] !!!! `assertsExecutionSuccessful` should be the method of `PipelineExecutor` result
3283
3343
  */
3284
3344
 
3285
3345
  /**