@promptbook/remote-client 0.92.0-8 → 0.92.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.
Files changed (207) hide show
  1. package/README.md +1 -5
  2. package/esm/index.es.js +225 -137
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/browser.index.d.ts +2 -0
  5. package/esm/typings/src/_packages/core.index.d.ts +26 -14
  6. package/esm/typings/src/_packages/types.index.d.ts +6 -2
  7. package/esm/typings/src/collection/PipelineCollection.d.ts +0 -2
  8. package/esm/typings/src/collection/SimplePipelineCollection.d.ts +1 -1
  9. package/esm/typings/src/commands/FOREACH/ForeachJson.d.ts +6 -6
  10. package/esm/typings/src/commands/FOREACH/foreachCommandParser.d.ts +0 -2
  11. package/esm/typings/src/commands/FORMFACTOR/formfactorCommandParser.d.ts +1 -1
  12. package/esm/typings/src/commands/_BOILERPLATE/boilerplateCommandParser.d.ts +1 -1
  13. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +36 -28
  14. package/esm/typings/src/config.d.ts +41 -11
  15. package/esm/typings/src/constants.d.ts +43 -2
  16. package/esm/typings/src/conversion/parsePipeline.d.ts +2 -2
  17. package/esm/typings/src/errors/0-BoilerplateError.d.ts +2 -2
  18. package/esm/typings/src/errors/CollectionError.d.ts +1 -1
  19. package/esm/typings/src/executables/$provideExecutablesForNode.d.ts +1 -1
  20. package/esm/typings/src/executables/apps/locateLibreoffice.d.ts +2 -1
  21. package/esm/typings/src/executables/apps/locatePandoc.d.ts +2 -1
  22. package/esm/typings/src/executables/locateApp.d.ts +2 -2
  23. package/esm/typings/src/executables/platforms/locateAppOnLinux.d.ts +2 -1
  24. package/esm/typings/src/executables/platforms/locateAppOnMacOs.d.ts +2 -1
  25. package/esm/typings/src/executables/platforms/locateAppOnWindows.d.ts +2 -1
  26. package/esm/typings/src/execution/AbstractTaskResult.d.ts +1 -1
  27. package/esm/typings/src/execution/CommonToolsOptions.d.ts +5 -1
  28. package/esm/typings/src/execution/ExecutionTask.d.ts +19 -1
  29. package/esm/typings/src/execution/LlmExecutionToolsConstructor.d.ts +2 -1
  30. package/esm/typings/src/execution/PipelineExecutorResult.d.ts +4 -2
  31. package/esm/typings/src/execution/PromptbookFetch.d.ts +1 -1
  32. package/esm/typings/src/execution/ScriptExecutionTools.d.ts +1 -1
  33. package/esm/typings/src/execution/createPipelineExecutor/$OngoingTaskResult.d.ts +12 -9
  34. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +13 -10
  35. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +12 -9
  36. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +15 -3
  37. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +21 -15
  38. package/esm/typings/src/execution/createPipelineExecutor/computeCosineSimilarity.d.ts +13 -0
  39. package/esm/typings/src/execution/createPipelineExecutor/filterJustOutputParameters.d.ts +7 -6
  40. package/esm/typings/src/execution/createPipelineExecutor/getContextForTask.d.ts +5 -1
  41. package/esm/typings/src/execution/createPipelineExecutor/getExamplesForTask.d.ts +1 -1
  42. package/esm/typings/src/execution/createPipelineExecutor/getKnowledgeForTask.d.ts +12 -9
  43. package/esm/typings/src/execution/createPipelineExecutor/getReservedParametersForTask.d.ts +18 -5
  44. package/esm/typings/src/execution/createPipelineExecutor/knowledgePiecesToString.d.ts +9 -0
  45. package/esm/typings/src/execution/execution-report/ExecutionReportJson.d.ts +1 -1
  46. package/esm/typings/src/execution/execution-report/ExecutionReportString.d.ts +1 -1
  47. package/esm/typings/src/execution/translation/automatic-translate/automatic-translators/LindatAutomaticTranslator.d.ts +4 -4
  48. package/esm/typings/src/execution/utils/checkExpectations.d.ts +3 -3
  49. package/esm/typings/src/execution/utils/uncertainNumber.d.ts +3 -2
  50. package/esm/typings/src/execution/utils/usageToWorktime.d.ts +1 -1
  51. package/esm/typings/src/formats/_common/{FormatDefinition.d.ts → FormatParser.d.ts} +8 -6
  52. package/esm/typings/src/formats/_common/FormatSubvalueParser.d.ts +66 -0
  53. package/esm/typings/src/formats/csv/CsvFormatParser.d.ts +17 -0
  54. package/esm/typings/src/formats/csv/CsvSettings.d.ts +2 -2
  55. package/esm/typings/src/formats/csv/utils/csvParse.d.ts +12 -0
  56. package/esm/typings/src/formats/csv/utils/isValidCsvString.d.ts +1 -1
  57. package/esm/typings/src/formats/index.d.ts +2 -2
  58. package/esm/typings/src/formats/json/JsonFormatParser.d.ts +19 -0
  59. package/esm/typings/src/formats/json/utils/isValidJsonString.d.ts +1 -1
  60. package/esm/typings/src/formats/json/utils/jsonParse.d.ts +0 -3
  61. package/esm/typings/src/formats/text/{TextFormatDefinition.d.ts → TextFormatParser.d.ts} +7 -7
  62. package/esm/typings/src/formats/xml/XmlFormatParser.d.ts +19 -0
  63. package/esm/typings/src/formats/xml/utils/isValidXmlString.d.ts +1 -1
  64. package/esm/typings/src/formfactors/_boilerplate/BoilerplateFormfactorDefinition.d.ts +3 -2
  65. package/esm/typings/src/formfactors/_common/AbstractFormfactorDefinition.d.ts +16 -7
  66. package/esm/typings/src/formfactors/_common/FormfactorDefinition.d.ts +3 -1
  67. package/esm/typings/src/formfactors/_common/string_formfactor_name.d.ts +2 -1
  68. package/esm/typings/src/formfactors/chatbot/ChatbotFormfactorDefinition.d.ts +2 -2
  69. package/esm/typings/src/formfactors/completion/CompletionFormfactorDefinition.d.ts +29 -0
  70. package/esm/typings/src/formfactors/generator/GeneratorFormfactorDefinition.d.ts +2 -1
  71. package/esm/typings/src/formfactors/generic/GenericFormfactorDefinition.d.ts +2 -2
  72. package/esm/typings/src/formfactors/index.d.ts +33 -8
  73. package/esm/typings/src/formfactors/matcher/MatcherFormfactorDefinition.d.ts +4 -2
  74. package/esm/typings/src/formfactors/sheets/SheetsFormfactorDefinition.d.ts +3 -2
  75. package/esm/typings/src/formfactors/translator/TranslatorFormfactorDefinition.d.ts +3 -2
  76. package/esm/typings/src/high-level-abstractions/index.d.ts +2 -2
  77. package/esm/typings/src/llm-providers/_common/register/$llmToolsMetadataRegister.d.ts +3 -3
  78. package/esm/typings/src/llm-providers/_common/register/$llmToolsRegister.d.ts +3 -3
  79. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsConfigurationFromEnv.d.ts +4 -4
  80. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts +4 -3
  81. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsFromEnv.d.ts +18 -5
  82. package/esm/typings/src/llm-providers/_common/register/LlmToolsConfiguration.d.ts +11 -4
  83. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +21 -42
  84. package/esm/typings/src/llm-providers/_common/register/LlmToolsOptions.d.ts +9 -2
  85. package/esm/typings/src/llm-providers/_common/register/createLlmToolsFromConfiguration.d.ts +13 -4
  86. package/esm/typings/src/llm-providers/_common/utils/cache/CacheItem.d.ts +10 -5
  87. package/esm/typings/src/llm-providers/_common/utils/cache/CacheLlmToolsOptions.d.ts +11 -3
  88. package/esm/typings/src/llm-providers/_common/utils/cache/cacheLlmTools.d.ts +3 -3
  89. package/esm/typings/src/llm-providers/_common/utils/count-total-usage/limitTotalUsage.d.ts +5 -5
  90. package/esm/typings/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionTools.d.ts +6 -0
  91. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  92. package/esm/typings/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.d.ts +5 -1
  93. package/esm/typings/src/llm-providers/azure-openai/AzureOpenAiExecutionToolsOptions.d.ts +4 -4
  94. package/esm/typings/src/llm-providers/deepseek/deepseek-models.d.ts +1 -1
  95. package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
  96. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +1 -1
  97. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +4 -0
  98. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  99. package/esm/typings/src/llm-providers/openai/register-configuration.d.ts +2 -2
  100. package/esm/typings/src/llm-providers/openai/register-constructor.d.ts +2 -2
  101. package/esm/typings/src/migrations/migratePipeline.d.ts +9 -0
  102. package/esm/typings/src/other/templates/getBookTemplates.d.ts +2 -2
  103. package/esm/typings/src/pipeline/PipelineInterface/PipelineInterface.d.ts +3 -3
  104. package/esm/typings/src/pipeline/PipelineInterface/constants.d.ts +1 -1
  105. package/esm/typings/src/pipeline/PipelineInterface/getPipelineInterface.d.ts +1 -1
  106. package/esm/typings/src/pipeline/PipelineInterface/isPipelineImplementingInterface.d.ts +5 -4
  107. package/esm/typings/src/pipeline/PipelineInterface/isPipelineInterfacesEqual.d.ts +1 -1
  108. package/esm/typings/src/pipeline/PipelineJson/CommonTaskJson.d.ts +10 -7
  109. package/esm/typings/src/pipeline/PipelineJson/ParameterJson.d.ts +1 -1
  110. package/esm/typings/src/pipeline/PipelineJson/PipelineJson.d.ts +3 -2
  111. package/esm/typings/src/pipeline/PipelineString.d.ts +3 -1
  112. package/esm/typings/src/pipeline/book-notation.d.ts +2 -2
  113. package/esm/typings/src/postprocessing/utils/extractBlock.d.ts +1 -1
  114. package/esm/typings/src/postprocessing/utils/extractJsonBlock.d.ts +2 -2
  115. package/esm/typings/src/prepare/prepareTasks.d.ts +8 -5
  116. package/esm/typings/src/remote-server/openapi.d.ts +1 -1
  117. package/esm/typings/src/remote-server/socket-types/listModels/PromptbookServer_ListModels_Response.d.ts +1 -1
  118. package/esm/typings/src/remote-server/startRemoteServer.d.ts +1 -1
  119. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +7 -6
  120. package/esm/typings/src/scrapers/_boilerplate/BoilerplateScraper.d.ts +3 -3
  121. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -1
  122. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -1
  123. package/esm/typings/src/scrapers/_common/Converter.d.ts +3 -1
  124. package/esm/typings/src/scrapers/_common/Scraper.d.ts +4 -3
  125. package/esm/typings/src/scrapers/_common/ScraperIntermediateSource.d.ts +4 -2
  126. package/esm/typings/src/scrapers/_common/prepareKnowledgePieces.d.ts +2 -2
  127. package/esm/typings/src/scrapers/_common/register/$provideFilesystemForNode.d.ts +2 -1
  128. package/esm/typings/src/scrapers/_common/register/$provideScrapersForBrowser.d.ts +6 -3
  129. package/esm/typings/src/scrapers/_common/register/$provideScrapersForNode.d.ts +3 -5
  130. package/esm/typings/src/scrapers/_common/register/$scrapersMetadataRegister.d.ts +3 -3
  131. package/esm/typings/src/scrapers/_common/register/$scrapersRegister.d.ts +3 -2
  132. package/esm/typings/src/scrapers/_common/register/ScraperAndConverterMetadata.d.ts +8 -5
  133. package/esm/typings/src/scrapers/_common/register/ScraperConstructor.d.ts +2 -1
  134. package/esm/typings/src/scrapers/_common/utils/getScraperIntermediateSource.d.ts +6 -5
  135. package/esm/typings/src/scrapers/_common/utils/makeKnowledgeSourceHandler.d.ts +3 -1
  136. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -1
  137. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +2 -1
  138. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +4 -1
  139. package/esm/typings/src/scrapers/markitdown/MarkitdownScraper.d.ts +1 -1
  140. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +2 -1
  141. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +3 -4
  142. package/esm/typings/src/scripting/javascript/JavascriptExecutionTools.d.ts +1 -1
  143. package/esm/typings/src/scripting/javascript/postprocessing-functions.d.ts +5 -1
  144. package/esm/typings/src/scripting/javascript/utils/preserve.d.ts +1 -1
  145. package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -1
  146. package/esm/typings/src/storage/file-cache-storage/FileCacheStorage.d.ts +12 -5
  147. package/esm/typings/src/storage/file-cache-storage/FileCacheStorageOptions.d.ts +4 -2
  148. package/esm/typings/src/storage/file-cache-storage/utils/nameToSubfolderPath.d.ts +2 -1
  149. package/esm/typings/src/storage/local-storage/getIndexedDbStorage.d.ts +11 -0
  150. package/esm/typings/src/storage/local-storage/utils/IndexedDbStorageOptions.d.ts +14 -0
  151. package/esm/typings/src/storage/local-storage/utils/makePromptbookStorageFromIndexedDb.d.ts +8 -0
  152. package/esm/typings/src/storage/local-storage/utils/makePromptbookStorageFromWebStorage.d.ts +2 -1
  153. package/esm/typings/src/types/IntermediateFilesStrategy.d.ts +2 -1
  154. package/esm/typings/src/types/ModelRequirements.d.ts +2 -2
  155. package/esm/typings/src/types/ModelVariant.d.ts +5 -5
  156. package/esm/typings/src/types/typeAliases.d.ts +22 -19
  157. package/esm/typings/src/utils/$Register.d.ts +8 -7
  158. package/esm/typings/src/utils/editable/edit-pipeline-string/addPipelineCommand.d.ts +2 -2
  159. package/esm/typings/src/utils/editable/edit-pipeline-string/deflatePipeline.d.ts +4 -1
  160. package/esm/typings/src/utils/editable/utils/isFlatPipeline.d.ts +2 -1
  161. package/esm/typings/src/utils/editable/utils/stringifyPipelineJson.d.ts +1 -1
  162. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -1
  163. package/esm/typings/src/utils/expectation-counters/index.d.ts +1 -1
  164. package/esm/typings/src/utils/markdown/extractAllBlocksFromMarkdown.d.ts +2 -2
  165. package/esm/typings/src/utils/markdown/extractAllListItemsFromMarkdown.d.ts +1 -1
  166. package/esm/typings/src/utils/markdown/extractOneBlockFromMarkdown.d.ts +2 -2
  167. package/esm/typings/src/utils/normalization/nameToUriPart.d.ts +4 -4
  168. package/esm/typings/src/utils/normalization/nameToUriParts.d.ts +4 -4
  169. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +3 -3
  170. package/esm/typings/src/utils/normalization/normalizeTo_SCREAMING_CASE.d.ts +3 -3
  171. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +4 -4
  172. package/esm/typings/src/utils/normalization/normalizeTo_snake_case.d.ts +3 -3
  173. package/esm/typings/src/utils/normalization/removeDiacritics.d.ts +3 -3
  174. package/esm/typings/src/utils/normalization/searchKeywords.d.ts +4 -1
  175. package/esm/typings/src/utils/normalization/titleToName.d.ts +4 -4
  176. package/esm/typings/src/utils/organization/TODO_USE.d.ts +1 -1
  177. package/esm/typings/src/utils/organization/empty_object.d.ts +2 -2
  178. package/esm/typings/src/utils/organization/just.d.ts +1 -1
  179. package/esm/typings/src/utils/organization/just_empty_object.d.ts +4 -4
  180. package/esm/typings/src/utils/organization/keepUnused.d.ts +1 -1
  181. package/esm/typings/src/utils/parameters/mapAvailableToExpectedParameters.d.ts +7 -7
  182. package/esm/typings/src/utils/removeQuotes.d.ts +2 -2
  183. package/esm/typings/src/utils/serialization/clonePipeline.d.ts +4 -3
  184. package/esm/typings/src/utils/serialization/deepClone.d.ts +5 -1
  185. package/esm/typings/src/utils/trimCodeBlock.d.ts +1 -1
  186. package/esm/typings/src/utils/trimEndOfCodeBlock.d.ts +1 -1
  187. package/esm/typings/src/utils/unwrapResult.d.ts +2 -2
  188. package/esm/typings/src/utils/validators/javascriptName/isValidJavascriptName.d.ts +3 -3
  189. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +5 -4
  190. package/esm/typings/src/utils/validators/semanticVersion/isValidPromptbookVersion.d.ts +1 -1
  191. package/esm/typings/src/utils/validators/semanticVersion/isValidSemanticVersion.d.ts +1 -1
  192. package/esm/typings/src/utils/validators/url/isHostnameOnPrivateNetwork.d.ts +1 -1
  193. package/esm/typings/src/utils/validators/url/isUrlOnPrivateNetwork.d.ts +1 -1
  194. package/esm/typings/src/utils/validators/url/isValidPipelineUrl.d.ts +1 -1
  195. package/esm/typings/src/utils/validators/url/isValidUrl.d.ts +1 -1
  196. package/esm/typings/src/version.d.ts +2 -1
  197. package/esm/typings/src/wizzard/wizzard.d.ts +1 -1
  198. package/package.json +14 -2
  199. package/umd/index.umd.js +225 -137
  200. package/umd/index.umd.js.map +1 -1
  201. package/esm/typings/src/formats/_common/FormatSubvalueDefinition.d.ts +0 -31
  202. package/esm/typings/src/formats/csv/CsvFormatDefinition.d.ts +0 -17
  203. package/esm/typings/src/formats/json/JsonFormatDefinition.d.ts +0 -19
  204. package/esm/typings/src/formats/xml/XmlFormatDefinition.d.ts +0 -19
  205. /package/esm/typings/src/llm-providers/{multiple → _multiple}/MultipleLlmExecutionTools.d.ts +0 -0
  206. /package/esm/typings/src/llm-providers/{multiple → _multiple}/joinLlmExecutionTools.d.ts +0 -0
  207. /package/esm/typings/src/llm-providers/{multiple → _multiple}/playground/playground.d.ts +0 -0
package/esm/index.es.js CHANGED
@@ -20,7 +20,7 @@ const BOOK_LANGUAGE_VERSION = '1.0.0';
20
20
  * @generated
21
21
  * @see https://github.com/webgptorg/promptbook
22
22
  */
23
- const PROMPTBOOK_ENGINE_VERSION = '0.92.0-8';
23
+ const PROMPTBOOK_ENGINE_VERSION = '0.92.0';
24
24
  /**
25
25
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
26
26
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -70,7 +70,7 @@ class AuthenticationError extends Error {
70
70
  }
71
71
 
72
72
  /**
73
- * This error indicates that the pipeline collection cannot be propperly loaded
73
+ * This error indicates that the pipeline collection cannot be properly loaded
74
74
  *
75
75
  * @public exported from `@promptbook/core`
76
76
  */
@@ -147,7 +147,7 @@ class MissingToolsError extends Error {
147
147
  super(spaceTrim((block) => `
148
148
  ${block(message)}
149
149
 
150
- Note: You have probbably forgot to provide some tools for pipeline execution or preparation
150
+ Note: You have probably forgot to provide some tools for pipeline execution or preparation
151
151
 
152
152
  `));
153
153
  this.name = 'MissingToolsError';
@@ -233,7 +233,7 @@ class PipelineExecutionError extends Error {
233
233
  super(message);
234
234
  this.name = 'PipelineExecutionError';
235
235
  // TODO: [🐙] DRY - Maybe $randomId
236
- this.id = `error-${$randomToken(8 /* <- TODO: To global config + Use Base58 to avoid simmilar char conflicts */)}`;
236
+ this.id = `error-${$randomToken(8 /* <- TODO: To global config + Use Base58 to avoid similar char conflicts */)}`;
237
237
  Object.setPrototypeOf(this, PipelineExecutionError.prototype);
238
238
  }
239
239
  }
@@ -284,7 +284,7 @@ class PromptbookFetchError extends Error {
284
284
  * Returns the same value that is passed as argument.
285
285
  * No side effects.
286
286
  *
287
- * Note: It can be usefull for:
287
+ * Note: It can be useful for:
288
288
  *
289
289
  * 1) Leveling indentation
290
290
  * 2) Putting always-true or always-false conditions without getting eslint errors
@@ -361,7 +361,7 @@ const CONNECTION_TIMEOUT_MS = 7 * 1000;
361
361
  const CONNECTION_RETRIES_LIMIT = 5;
362
362
  // <- TODO: [🧜‍♂️]
363
363
  /**
364
- * @@@
364
+ * Default settings for parsing and generating CSV files in Promptbook.
365
365
  *
366
366
  * @public exported from `@promptbook/core`
367
367
  */
@@ -431,7 +431,7 @@ class UnexpectedError extends Error {
431
431
  ${block(message)}
432
432
 
433
433
  Note: This error should not happen.
434
- It's probbably a bug in the pipeline collection
434
+ It's probably a bug in the pipeline collection
435
435
 
436
436
  Please report issue:
437
437
  ${block(getErrorReportUrl(new Error(message)).href)}
@@ -556,7 +556,7 @@ function deserializeError(error) {
556
556
  * Tests if given string is valid URL.
557
557
  *
558
558
  * Note: Dataurl are considered perfectly valid.
559
- * Note: There are two simmilar functions:
559
+ * Note: There are two similar functions:
560
560
  * - `isValidUrl` which tests any URL
561
561
  * - `isValidPipelineUrl` *(this one)* which tests just promptbook URL
562
562
  *
@@ -993,10 +993,10 @@ for (let i = 0; i < defaultDiacriticsRemovalMap.length; i++) {
993
993
  */
994
994
 
995
995
  /**
996
- * @@@
996
+ * Removes diacritic marks (accents) from characters in a string.
997
997
  *
998
- * @param input @@@
999
- * @returns @@@
998
+ * @param input The string containing diacritics to be normalized.
999
+ * @returns The string with diacritics removed or normalized.
1000
1000
  * @public exported from `@promptbook/utils`
1001
1001
  */
1002
1002
  function removeDiacritics(input) {
@@ -1010,10 +1010,10 @@ function removeDiacritics(input) {
1010
1010
  */
1011
1011
 
1012
1012
  /**
1013
- * @@@
1013
+ * Converts a given text to kebab-case format.
1014
1014
  *
1015
- * @param text @@@
1016
- * @returns @@@
1015
+ * @param text The text to be converted.
1016
+ * @returns The kebab-case formatted string.
1017
1017
  * @example 'hello-world'
1018
1018
  * @example 'i-love-promptbook'
1019
1019
  * @public exported from `@promptbook/utils`
@@ -1299,7 +1299,7 @@ const sectionCommandParser = {
1299
1299
  throw new ParseError(`Task section and example section must end with return statement -> {parameterName}`);
1300
1300
  };
1301
1301
  if ($taskJson.content === undefined) {
1302
- throw new UnexpectedError(`Content is missing in the taskJson - probbably commands are applied in wrong order`);
1302
+ throw new UnexpectedError(`Content is missing in the taskJson - probably commands are applied in wrong order`);
1303
1303
  }
1304
1304
  if (command.taskType === 'EXAMPLE') {
1305
1305
  expectResultingParameterName();
@@ -1367,7 +1367,7 @@ const sectionCommandParser = {
1367
1367
  /**
1368
1368
  * Parses the boilerplate command
1369
1369
  *
1370
- * Note: @@@ This command is used as boilerplate for new commands - it should NOT be used in any `.book` file
1370
+ * Note: @@ This command is used as boilerplate for new commands - it should NOT be used in any `.book` file
1371
1371
  *
1372
1372
  * @see `documentationUrl` for more details
1373
1373
  * @private within the commands folder
@@ -1460,7 +1460,7 @@ const boilerplateCommandParser = {
1460
1460
  /**
1461
1461
  * Tests if given string is valid semantic version
1462
1462
  *
1463
- * Note: There are two simmilar functions:
1463
+ * Note: There are two similar functions:
1464
1464
  * - `isValidSemanticVersion` which tests any semantic version
1465
1465
  * - `isValidPromptbookVersion` *(this one)* which tests just Promptbook versions
1466
1466
  *
@@ -1482,7 +1482,7 @@ function isValidSemanticVersion(version) {
1482
1482
  *
1483
1483
  * @see https://www.npmjs.com/package/promptbook?activeTab=versions
1484
1484
  * Note: When you are using for example promptbook 2.0.0 and there already is promptbook 3.0.0 it don`t know about it.
1485
- * Note: There are two simmilar functions:
1485
+ * Note: There are two similar functions:
1486
1486
  * - `isValidSemanticVersion` which tests any semantic version
1487
1487
  * - `isValidPromptbookVersion` *(this one)* which tests just Promptbook versions
1488
1488
  *
@@ -1825,7 +1825,7 @@ const expectCommandParser = {
1825
1825
  };
1826
1826
 
1827
1827
  /**
1828
- * @@@
1828
+ * Contains configuration options for parsing and generating CSV files, such as delimiters and quoting rules.
1829
1829
  *
1830
1830
  * @public exported from `@promptbook/core`
1831
1831
  */
@@ -1834,11 +1834,29 @@ const MANDATORY_CSV_SETTINGS = Object.freeze({
1834
1834
  // encoding: 'utf-8',
1835
1835
  });
1836
1836
 
1837
+ /**
1838
+ * Converts a CSV string into an object
1839
+ *
1840
+ * Note: This is wrapper around `papaparse.parse()` with better autohealing
1841
+ *
1842
+ * @private - for now until `@promptbook/csv` is released
1843
+ */
1844
+ function csvParse(value /* <- TODO: string_csv */, settings, schema /* <- TODO: Make CSV Schemas */) {
1845
+ settings = { ...settings, ...MANDATORY_CSV_SETTINGS };
1846
+ // Note: Autoheal invalid '\n' characters
1847
+ if (settings.newline && !settings.newline.includes('\r') && value.includes('\r')) {
1848
+ console.warn('CSV string contains carriage return characters, but in the CSV settings the `newline` setting does not include them. Autohealing the CSV string.');
1849
+ value = value.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
1850
+ }
1851
+ const csv = parse(value, settings);
1852
+ return csv;
1853
+ }
1854
+
1837
1855
  /**
1838
1856
  * Function to check if a string is valid CSV
1839
1857
  *
1840
1858
  * @param value The string to check
1841
- * @returns True if the string is a valid CSV string, false otherwise
1859
+ * @returns `true` if the string is a valid CSV string, false otherwise
1842
1860
  *
1843
1861
  * @public exported from `@promptbook/utils`
1844
1862
  */
@@ -1862,7 +1880,7 @@ function isValidCsvString(value) {
1862
1880
  * @public exported from `@promptbook/core`
1863
1881
  * <- TODO: [🏢] Export from package `@promptbook/csv`
1864
1882
  */
1865
- const CsvFormatDefinition = {
1883
+ const CsvFormatParser = {
1866
1884
  formatName: 'CSV',
1867
1885
  aliases: ['SPREADSHEET', 'TABLE'],
1868
1886
  isValid(value, settings, schema) {
@@ -1874,12 +1892,12 @@ const CsvFormatDefinition = {
1874
1892
  heal(value, settings, schema) {
1875
1893
  throw new Error('Not implemented');
1876
1894
  },
1877
- subvalueDefinitions: [
1895
+ subvalueParsers: [
1878
1896
  {
1879
1897
  subvalueName: 'ROW',
1880
- async mapValues(value, outputParameterName, settings, mapCallback) {
1881
- // TODO: [👨🏾‍🤝‍👨🏼] DRY csv parsing
1882
- const csv = parse(value, { ...settings, ...MANDATORY_CSV_SETTINGS });
1898
+ async mapValues(options) {
1899
+ const { value, outputParameterName, settings, mapCallback, onProgress } = options;
1900
+ const csv = csvParse(value, settings);
1883
1901
  if (csv.errors.length !== 0) {
1884
1902
  throw new CsvFormatError(spaceTrim$1((block) => `
1885
1903
  CSV parsing error
@@ -1894,23 +1912,37 @@ const CsvFormatDefinition = {
1894
1912
  ${block(value)}
1895
1913
  `));
1896
1914
  }
1897
- const mappedData = await Promise.all(csv.data.map(async (row, index) => {
1915
+ const mappedData = [];
1916
+ const length = csv.data.length;
1917
+ for (let index = 0; index < length; index++) {
1918
+ const row = csv.data[index];
1898
1919
  if (row[outputParameterName]) {
1899
1920
  throw new CsvFormatError(`Can not overwrite existing column "${outputParameterName}" in CSV row`);
1900
1921
  }
1901
- return {
1922
+ const mappedRow = {
1902
1923
  ...row,
1903
- [outputParameterName]: await mapCallback(row, index),
1924
+ [outputParameterName]: await mapCallback(row, index, length),
1904
1925
  };
1905
- }));
1926
+ mappedData.push(mappedRow);
1927
+ if (onProgress) {
1928
+ // Note: Report the CSV with all rows mapped so far
1929
+ /*
1930
+ // TODO: [🛕] Report progress with all the rows including the pending ones
1931
+ const progressData = mappedData.map((row, i) =>
1932
+ i > index ? { ...row, [outputParameterName]: PENDING_VALUE_PLACEHOLDER } : row,
1933
+ );
1934
+ */
1935
+ await onProgress(unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS }));
1936
+ }
1937
+ }
1906
1938
  return unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
1907
1939
  },
1908
1940
  },
1909
1941
  {
1910
1942
  subvalueName: 'CELL',
1911
- async mapValues(value, outputParameterName, settings, mapCallback) {
1912
- // TODO: [👨🏾‍🤝‍👨🏼] DRY csv parsing
1913
- const csv = parse(value, { ...settings, ...MANDATORY_CSV_SETTINGS });
1943
+ async mapValues(options) {
1944
+ const { value, settings, mapCallback, onProgress } = options;
1945
+ const csv = csvParse(value, settings);
1914
1946
  if (csv.errors.length !== 0) {
1915
1947
  throw new CsvFormatError(spaceTrim$1((block) => `
1916
1948
  CSV parsing error
@@ -1926,9 +1958,9 @@ const CsvFormatDefinition = {
1926
1958
  `));
1927
1959
  }
1928
1960
  const mappedData = await Promise.all(csv.data.map(async (row, rowIndex) => {
1929
- return /* not await */ Promise.all(Object.entries(row).map(async ([key, value], columnIndex) => {
1961
+ return /* not await */ Promise.all(Object.entries(row).map(async ([key, value], columnIndex, array) => {
1930
1962
  const index = rowIndex * Object.keys(row).length + columnIndex;
1931
- return /* not await */ mapCallback({ [key]: value }, index);
1963
+ return /* not await */ mapCallback({ [key]: value }, index, array.length);
1932
1964
  }));
1933
1965
  }));
1934
1966
  return unparse(mappedData, { ...settings, ...MANDATORY_CSV_SETTINGS });
@@ -1937,10 +1969,10 @@ const CsvFormatDefinition = {
1937
1969
  ],
1938
1970
  };
1939
1971
  /**
1940
- * TODO: [🍓] In `CsvFormatDefinition` implement simple `isValid`
1941
- * TODO: [🍓] In `CsvFormatDefinition` implement partial `canBeValid`
1942
- * TODO: [🍓] In `CsvFormatDefinition` implement `heal
1943
- * TODO: [🍓] In `CsvFormatDefinition` implement `subvalueDefinitions`
1972
+ * TODO: [🍓] In `CsvFormatParser` implement simple `isValid`
1973
+ * TODO: [🍓] In `CsvFormatParser` implement partial `canBeValid`
1974
+ * TODO: [🍓] In `CsvFormatParser` implement `heal
1975
+ * TODO: [🍓] In `CsvFormatParser` implement `subvalueParsers`
1944
1976
  * TODO: [🏢] Allow to expect something inside CSV objects and other formats
1945
1977
  */
1946
1978
 
@@ -1948,7 +1980,7 @@ const CsvFormatDefinition = {
1948
1980
  * Function isValidJsonString will tell you if the string is valid JSON or not
1949
1981
  *
1950
1982
  * @param value The string to check
1951
- * @returns True if the string is a valid JSON string, false otherwise
1983
+ * @returns `true` if the string is a valid JSON string, false otherwise
1952
1984
  *
1953
1985
  * @public exported from `@promptbook/utils`
1954
1986
  */
@@ -1971,7 +2003,7 @@ function isValidJsonString(value /* <- [👨‍⚖️] */) {
1971
2003
  *
1972
2004
  * @private still in development [🏢]
1973
2005
  */
1974
- const JsonFormatDefinition = {
2006
+ const JsonFormatParser = {
1975
2007
  formatName: 'JSON',
1976
2008
  mimeType: 'application/json',
1977
2009
  isValid(value, settings, schema) {
@@ -1983,28 +2015,28 @@ const JsonFormatDefinition = {
1983
2015
  heal(value, settings, schema) {
1984
2016
  throw new Error('Not implemented');
1985
2017
  },
1986
- subvalueDefinitions: [],
2018
+ subvalueParsers: [],
1987
2019
  };
1988
2020
  /**
1989
- * TODO: [🧠] Maybe propper instance of object
2021
+ * TODO: [🧠] Maybe proper instance of object
1990
2022
  * TODO: [0] Make string_serialized_json
1991
2023
  * TODO: [1] Make type for JSON Settings and Schema
1992
2024
  * TODO: [🧠] What to use for validating JSONs - JSON Schema, ZoD, typescript types/interfaces,...?
1993
- * TODO: [🍓] In `JsonFormatDefinition` implement simple `isValid`
1994
- * TODO: [🍓] In `JsonFormatDefinition` implement partial `canBeValid`
1995
- * TODO: [🍓] In `JsonFormatDefinition` implement `heal
1996
- * TODO: [🍓] In `JsonFormatDefinition` implement `subvalueDefinitions`
2025
+ * TODO: [🍓] In `JsonFormatParser` implement simple `isValid`
2026
+ * TODO: [🍓] In `JsonFormatParser` implement partial `canBeValid`
2027
+ * TODO: [🍓] In `JsonFormatParser` implement `heal
2028
+ * TODO: [🍓] In `JsonFormatParser` implement `subvalueParsers`
1997
2029
  * TODO: [🏢] Allow to expect something inside JSON objects and other formats
1998
2030
  */
1999
2031
 
2000
2032
  /**
2001
2033
  * Definition for any text - this will be always valid
2002
2034
  *
2003
- * Note: This is not useful for validation, but for splitting and mapping with `subvalueDefinitions`
2035
+ * Note: This is not useful for validation, but for splitting and mapping with `subvalueParsers`
2004
2036
  *
2005
2037
  * @public exported from `@promptbook/core`
2006
2038
  */
2007
- const TextFormatDefinition = {
2039
+ const TextFormatParser = {
2008
2040
  formatName: 'TEXT',
2009
2041
  isValid(value) {
2010
2042
  return typeof value === 'string';
@@ -2013,19 +2045,20 @@ const TextFormatDefinition = {
2013
2045
  return typeof partialValue === 'string';
2014
2046
  },
2015
2047
  heal() {
2016
- throw new UnexpectedError('It does not make sense to call `TextFormatDefinition.heal`');
2048
+ throw new UnexpectedError('It does not make sense to call `TextFormatParser.heal`');
2017
2049
  },
2018
- subvalueDefinitions: [
2050
+ subvalueParsers: [
2019
2051
  {
2020
2052
  subvalueName: 'LINE',
2021
- async mapValues(value, outputParameterName, settings, mapCallback) {
2053
+ async mapValues(options) {
2054
+ const { value, mapCallback, onProgress } = options;
2022
2055
  const lines = value.split('\n');
2023
- const mappedLines = await Promise.all(lines.map((lineContent, lineNumber) =>
2056
+ const mappedLines = await Promise.all(lines.map((lineContent, lineNumber, array) =>
2024
2057
  // TODO: [🧠] Maybe option to skip empty line
2025
2058
  /* not await */ mapCallback({
2026
2059
  lineContent,
2027
2060
  // TODO: [🧠] Maybe also put here `lineNumber`
2028
- }, lineNumber)));
2061
+ }, lineNumber, array.length)));
2029
2062
  return mappedLines.join('\n');
2030
2063
  },
2031
2064
  },
@@ -2035,10 +2068,10 @@ const TextFormatDefinition = {
2035
2068
  /**
2036
2069
  * TODO: [1] Make type for XML Text and Schema
2037
2070
  * TODO: [🧠][🤠] Here should be all words, characters, lines, paragraphs, pages available as subvalues
2038
- * TODO: [🍓] In `TextFormatDefinition` implement simple `isValid`
2039
- * TODO: [🍓] In `TextFormatDefinition` implement partial `canBeValid`
2040
- * TODO: [🍓] In `TextFormatDefinition` implement `heal
2041
- * TODO: [🍓] In `TextFormatDefinition` implement `subvalueDefinitions`
2071
+ * TODO: [🍓] In `TextFormatParser` implement simple `isValid`
2072
+ * TODO: [🍓] In `TextFormatParser` implement partial `canBeValid`
2073
+ * TODO: [🍓] In `TextFormatParser` implement `heal
2074
+ * TODO: [🍓] In `TextFormatParser` implement `subvalueParsers`
2042
2075
  * TODO: [🏢] Allow to expect something inside each item of list and other formats
2043
2076
  */
2044
2077
 
@@ -2046,7 +2079,7 @@ const TextFormatDefinition = {
2046
2079
  * Function to check if a string is valid XML
2047
2080
  *
2048
2081
  * @param value
2049
- * @returns True if the string is a valid XML string, false otherwise
2082
+ * @returns `true` if the string is a valid XML string, false otherwise
2050
2083
  *
2051
2084
  * @public exported from `@promptbook/utils`
2052
2085
  */
@@ -2071,7 +2104,7 @@ function isValidXmlString(value) {
2071
2104
  *
2072
2105
  * @private still in development [🏢]
2073
2106
  */
2074
- const XmlFormatDefinition = {
2107
+ const XmlFormatParser = {
2075
2108
  formatName: 'XML',
2076
2109
  mimeType: 'application/xml',
2077
2110
  isValid(value, settings, schema) {
@@ -2083,17 +2116,17 @@ const XmlFormatDefinition = {
2083
2116
  heal(value, settings, schema) {
2084
2117
  throw new Error('Not implemented');
2085
2118
  },
2086
- subvalueDefinitions: [],
2119
+ subvalueParsers: [],
2087
2120
  };
2088
2121
  /**
2089
- * TODO: [🧠] Maybe propper instance of object
2122
+ * TODO: [🧠] Maybe proper instance of object
2090
2123
  * TODO: [0] Make string_serialized_xml
2091
2124
  * TODO: [1] Make type for XML Settings and Schema
2092
2125
  * TODO: [🧠] What to use for validating XMLs - XSD,...
2093
- * TODO: [🍓] In `XmlFormatDefinition` implement simple `isValid`
2094
- * TODO: [🍓] In `XmlFormatDefinition` implement partial `canBeValid`
2095
- * TODO: [🍓] In `XmlFormatDefinition` implement `heal
2096
- * TODO: [🍓] In `XmlFormatDefinition` implement `subvalueDefinitions`
2126
+ * TODO: [🍓] In `XmlFormatParser` implement simple `isValid`
2127
+ * TODO: [🍓] In `XmlFormatParser` implement partial `canBeValid`
2128
+ * TODO: [🍓] In `XmlFormatParser` implement `heal
2129
+ * TODO: [🍓] In `XmlFormatParser` implement `subvalueParsers`
2097
2130
  * TODO: [🏢] Allow to expect something inside XML and other formats
2098
2131
  */
2099
2132
 
@@ -2102,21 +2135,16 @@ const XmlFormatDefinition = {
2102
2135
  *
2103
2136
  * @private internal index of `...` <- TODO [🏢]
2104
2137
  */
2105
- const FORMAT_DEFINITIONS = [
2106
- JsonFormatDefinition,
2107
- XmlFormatDefinition,
2108
- TextFormatDefinition,
2109
- CsvFormatDefinition,
2110
- ];
2138
+ const FORMAT_DEFINITIONS = [JsonFormatParser, XmlFormatParser, TextFormatParser, CsvFormatParser];
2111
2139
  /**
2112
2140
  * Note: [💞] Ignore a discrepancy between file name and entity name
2113
2141
  */
2114
2142
 
2115
2143
  /**
2116
- * @@@
2144
+ * Normalizes a text string to SCREAMING_CASE (all uppercase with underscores).
2117
2145
  *
2118
- * @param text @@@
2119
- * @returns @@@
2146
+ * @param text The text string to be converted to SCREAMING_CASE format.
2147
+ * @returns The normalized text in SCREAMING_CASE format.
2120
2148
  * @example 'HELLO_WORLD'
2121
2149
  * @example 'I_LOVE_PROMPTBOOK'
2122
2150
  * @public exported from `@promptbook/utils`
@@ -2348,8 +2376,12 @@ function checkSerializableAsJson(options) {
2348
2376
  */
2349
2377
 
2350
2378
  /**
2351
- * @@@
2379
+ * Creates a deep clone of the given object
2352
2380
  *
2381
+ * Note: This method only works for objects that are fully serializable to JSON and do not contain functions, Dates, or special types.
2382
+ *
2383
+ * @param objectValue The object to clone.
2384
+ * @returns A deep, writable clone of the input object.
2353
2385
  * @public exported from `@promptbook/utils`
2354
2386
  */
2355
2387
  function deepClone(objectValue) {
@@ -2449,11 +2481,11 @@ const RESERVED_PARAMETER_NAMES = exportJson({
2449
2481
  */
2450
2482
 
2451
2483
  /**
2452
- * @@@
2484
+ * Normalizes a given text to camelCase format.
2453
2485
  *
2454
- * @param text @@@
2455
- * @param _isFirstLetterCapital @@@
2456
- * @returns @@@
2486
+ * @param text The text to be normalized.
2487
+ * @param _isFirstLetterCapital Whether the first letter should be capitalized.
2488
+ * @returns The camelCase formatted string.
2457
2489
  * @example 'helloWorld'
2458
2490
  * @example 'iLovePromptbook'
2459
2491
  * @public exported from `@promptbook/utils`
@@ -2519,9 +2551,9 @@ function removeEmojis(text) {
2519
2551
  /**
2520
2552
  * Removes quotes from a string
2521
2553
  *
2522
- * Tip: This is very usefull for post-processing of the result of the LLM model
2554
+ * Tip: This is very useful for post-processing of the result of the LLM model
2523
2555
  * Note: This function removes only the same quotes from the beginning and the end of the string
2524
- * Note: There are two simmilar functions:
2556
+ * Note: There are two similar functions:
2525
2557
  * - `removeQuotes` which removes only bounding quotes
2526
2558
  * - `unwrapResult` which removes whole introduce sentence
2527
2559
  *
@@ -2533,18 +2565,19 @@ function removeQuotes(text) {
2533
2565
  if (text.startsWith('"') && text.endsWith('"')) {
2534
2566
  return text.slice(1, -1);
2535
2567
  }
2536
- if (text.startsWith('\'') && text.endsWith('\'')) {
2568
+ if (text.startsWith("'") && text.endsWith("'")) {
2537
2569
  return text.slice(1, -1);
2538
2570
  }
2539
2571
  return text;
2540
2572
  }
2541
2573
 
2542
2574
  /**
2543
- * Function `validateParameterName` will @@@
2575
+ * Function `validateParameterName` will normalize and validate a parameter name for use in pipelines.
2576
+ * It removes diacritics, emojis, and quotes, normalizes to camelCase, and checks for reserved names and invalid characters.
2544
2577
  *
2545
- * @param parameterName @@@
2546
- * @returns @@@
2547
- * @throws {ParseError} @@@
2578
+ * @param parameterName The parameter name to validate and normalize.
2579
+ * @returns The validated and normalized parameter name.
2580
+ * @throws {ParseError} If the parameter name is empty, reserved, or contains invalid characters.
2548
2581
  * @private within the repository
2549
2582
  */
2550
2583
  function validateParameterName(parameterName) {
@@ -2614,8 +2647,6 @@ function validateParameterName(parameterName) {
2614
2647
  /**
2615
2648
  * Parses the foreach command
2616
2649
  *
2617
- * Note: @@@ This command is used as foreach for new commands - it should NOT be used in any `.book` file
2618
- *
2619
2650
  * @see `documentationUrl` for more details
2620
2651
  * @public exported from `@promptbook/editable`
2621
2652
  */
@@ -2672,14 +2703,14 @@ const foreachCommandParser = {
2672
2703
  `));
2673
2704
  // <- TODO: [🏢] List all supported format names
2674
2705
  }
2675
- const subvalueDefinition = formatDefinition.subvalueDefinitions.find((subvalueDefinition) => [subvalueDefinition.subvalueName, ...(subvalueDefinition.aliases || [])].includes(subformatName));
2676
- if (subvalueDefinition === undefined) {
2706
+ const subvalueParser = formatDefinition.subvalueParsers.find((subvalueParser) => [subvalueParser.subvalueName, ...(subvalueParser.aliases || [])].includes(subformatName));
2707
+ if (subvalueParser === undefined) {
2677
2708
  throw new ParseError(spaceTrim$1((block) => `
2678
2709
  Unsupported subformat name "${subformatName}" for format "${formatName}"
2679
2710
 
2680
2711
  Available subformat names for format "${formatDefinition.formatName}":
2681
- ${block(formatDefinition.subvalueDefinitions
2682
- .map((subvalueDefinition) => subvalueDefinition.subvalueName)
2712
+ ${block(formatDefinition.subvalueParsers
2713
+ .map((subvalueParser) => subvalueParser.subvalueName)
2683
2714
  .map((subvalueName) => `- ${subvalueName}`)
2684
2715
  .join('\n'))}
2685
2716
  `));
@@ -2856,14 +2887,14 @@ const formatCommandParser = {
2856
2887
  };
2857
2888
 
2858
2889
  /**
2859
- * @@@
2890
+ * Chatbot form factor definition for conversational interfaces that interact with users in a chat-like manner.
2860
2891
  *
2861
2892
  * @public exported from `@promptbook/core`
2862
2893
  */
2863
2894
  const ChatbotFormfactorDefinition = {
2864
2895
  name: 'CHATBOT',
2865
2896
  aliasNames: ['CHAT'],
2866
- description: `@@@`,
2897
+ description: `A chatbot form factor for conversational user interfaces.`,
2867
2898
  documentationUrl: `https://github.com/webgptorg/promptbook/discussions/174`,
2868
2899
  pipelineInterface: {
2869
2900
  inputParameters: [
@@ -2890,7 +2921,45 @@ const ChatbotFormfactorDefinition = {
2890
2921
  };
2891
2922
 
2892
2923
  /**
2893
- * Generator is form of app that @@@
2924
+ * Completion is formfactor that emulates completion models
2925
+ *
2926
+ * @public exported from `@promptbook/core`
2927
+ */
2928
+ const CompletionFormfactorDefinition = {
2929
+ name: 'COMPLETION',
2930
+ description: `Completion is formfactor that emulates completion models`,
2931
+ documentationUrl: `https://github.com/webgptorg/promptbook/discussions/@@`,
2932
+ // <- TODO: https://github.com/webgptorg/promptbook/discussions/new?category=concepts
2933
+ // "🔠 Completion Formfactor"
2934
+ pipelineInterface: {
2935
+ inputParameters: [
2936
+ {
2937
+ name: 'inputText',
2938
+ description: `Input text to be completed`,
2939
+ isInput: true,
2940
+ isOutput: false,
2941
+ },
2942
+ {
2943
+ name: 'instructions',
2944
+ description: `Additional instructions for the model, for example the required length, empty by default`,
2945
+ isInput: true,
2946
+ isOutput: false,
2947
+ },
2948
+ ],
2949
+ outputParameters: [
2950
+ {
2951
+ name: 'followingText',
2952
+ description: `Text that follows the input text`,
2953
+ isInput: false,
2954
+ isOutput: true,
2955
+ },
2956
+ ],
2957
+ },
2958
+ };
2959
+
2960
+ /**
2961
+ * Generator form factor represents an application that generates content or data based on user input or predefined rules.
2962
+ * This form factor is used for apps that produce outputs, such as text, images, or other media, based on provided input.
2894
2963
  *
2895
2964
  * @public exported from `@promptbook/core`
2896
2965
  */
@@ -2919,7 +2988,7 @@ const GeneratorFormfactorDefinition = {
2919
2988
  };
2920
2989
 
2921
2990
  /**
2922
- * @@@
2991
+ * Pipeline interface which is equivalent to `any`
2923
2992
  *
2924
2993
  * @see https://github.com/webgptorg/promptbook/discussions/171
2925
2994
  *
@@ -2934,13 +3003,13 @@ const GENERIC_PIPELINE_INTERFACE = {
2934
3003
  */
2935
3004
 
2936
3005
  /**
2937
- * @@@
3006
+ * A generic pipeline
2938
3007
  *
2939
3008
  * @public exported from `@promptbook/core`
2940
3009
  */
2941
3010
  const GenericFormfactorDefinition = {
2942
3011
  name: 'GENERIC',
2943
- description: `@@@`,
3012
+ description: `A generic pipeline`,
2944
3013
  documentationUrl: `https://github.com/webgptorg/promptbook/discussions/173`,
2945
3014
  pipelineInterface: GENERIC_PIPELINE_INTERFACE,
2946
3015
  };
@@ -2975,17 +3044,20 @@ const ImageGeneratorFormfactorDefinition = {
2975
3044
  };
2976
3045
 
2977
3046
  /**
2978
- * Matcher is form of app that @@@
3047
+ * Matcher is form of app that evaluates (spreadsheet) content against defined criteria or patterns,
3048
+ * determining if it matches or meets specific requirements. Used for classification,
3049
+ * validation, filtering, and quality assessment of inputs.
2979
3050
  *
2980
3051
  * @public exported from `@promptbook/core`
2981
3052
  */
2982
3053
  const MatcherFormfactorDefinition = {
2983
3054
  name: 'EXPERIMENTAL_MATCHER',
2984
- description: `@@@`,
3055
+ description: `An evaluation system that determines whether content meets specific criteria or patterns.
3056
+ Used for content validation, quality assessment, and intelligent filtering tasks. Currently in experimental phase.`,
2985
3057
  documentationUrl: `https://github.com/webgptorg/promptbook/discussions/177`,
2986
3058
  pipelineInterface: {
2987
3059
  inputParameters: [
2988
- /* @@@ */
3060
+ /* Input parameters for content to be matched and criteria to match against */
2989
3061
  {
2990
3062
  name: 'nonce',
2991
3063
  description: 'Just to prevent EXPERIMENTAL_MATCHER to be set as implicit formfactor',
@@ -2994,20 +3066,21 @@ const MatcherFormfactorDefinition = {
2994
3066
  },
2995
3067
  ],
2996
3068
  outputParameters: [
2997
- /* @@@ */
3069
+ /* Output parameters containing match results, confidence scores, and relevant metadata */
2998
3070
  ],
2999
3071
  },
3000
3072
  };
3001
3073
 
3002
3074
  /**
3003
- * Sheets is form of app that @@@
3075
+ * Sheets is form of app that processes tabular data in CSV format, allowing transformation
3076
+ * and analysis of structured data through AI-powered operations
3004
3077
  *
3005
3078
  * @public exported from `@promptbook/core`
3006
3079
  */
3007
3080
  const SheetsFormfactorDefinition = {
3008
3081
  name: 'SHEETS',
3009
3082
  aliasNames: ['SHEETS', 'SHEET'],
3010
- description: `@@@`,
3083
+ description: `A formfactor for processing spreadsheet-like data in CSV format, enabling AI transformations on tabular data`,
3011
3084
  documentationUrl: `https://github.com/webgptorg/promptbook/discussions/176`,
3012
3085
  pipelineInterface: {
3013
3086
  inputParameters: [
@@ -3030,13 +3103,16 @@ const SheetsFormfactorDefinition = {
3030
3103
  };
3031
3104
 
3032
3105
  /**
3033
- * Translator is form of app that @@@
3106
+ * Translator is form of app that transforms input text from one form to another,
3107
+ * such as language translation, style conversion, tone modification, or other text transformations.
3034
3108
  *
3035
3109
  * @public exported from `@promptbook/core`
3036
3110
  */
3037
3111
  const TranslatorFormfactorDefinition = {
3038
3112
  name: 'TRANSLATOR',
3039
- description: `@@@`,
3113
+ description: `A text transformation system that converts input content into different forms,
3114
+ including language translations, paraphrasing, style conversions, and tone adjustments.
3115
+ This form factor takes one input and produces one transformed output.`,
3040
3116
  documentationUrl: `https://github.com/webgptorg/promptbook/discussions/175`,
3041
3117
  pipelineInterface: {
3042
3118
  inputParameters: [
@@ -3073,6 +3149,8 @@ const FORMFACTOR_DEFINITIONS = [
3073
3149
  MatcherFormfactorDefinition,
3074
3150
  GeneratorFormfactorDefinition,
3075
3151
  ImageGeneratorFormfactorDefinition,
3152
+ CompletionFormfactorDefinition,
3153
+ // <- [🛬] When making new formfactor, copy the _boilerplate and link it here
3076
3154
  ];
3077
3155
  /**
3078
3156
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -3081,7 +3159,7 @@ const FORMFACTOR_DEFINITIONS = [
3081
3159
  /**
3082
3160
  * Parses the formfactor command
3083
3161
  *
3084
- * Note: @@@ This command is used as formfactor for new commands - it should NOT be used in any `.book` file
3162
+ * Note: This command is used as a formfactor for new commands and defines the app type format - it should NOT be used in any `.book` file
3085
3163
  *
3086
3164
  * @see `documentationUrl` for more details
3087
3165
  * @public exported from `@promptbook/editable`
@@ -3103,7 +3181,7 @@ const formfactorCommandParser = {
3103
3181
  /**
3104
3182
  * Description of the FORMFACTOR command
3105
3183
  */
3106
- description: `@@`,
3184
+ description: `Specifies the application type and interface requirements that this promptbook should conform to`,
3107
3185
  /**
3108
3186
  * Link to documentation
3109
3187
  */
@@ -3246,8 +3324,7 @@ const jokerCommandParser = {
3246
3324
  };
3247
3325
 
3248
3326
  /**
3249
- * @@@
3250
- *
3327
+ * @see {@link ModelVariant}
3251
3328
  * @public exported from `@promptbook/core`
3252
3329
  */
3253
3330
  const MODEL_VARIANTS = ['COMPLETION', 'CHAT', 'EMBEDDING' /* <- TODO [🏳] */ /* <- [🤖] */];
@@ -3679,10 +3756,10 @@ function $applyToTaskJson(command, $taskJson, $pipelineJson) {
3679
3756
  }
3680
3757
 
3681
3758
  /**
3682
- * @@@
3759
+ * Checks if the given value is a valid JavaScript identifier name.
3683
3760
  *
3684
- * @param javascriptName @@@
3685
- * @returns @@@
3761
+ * @param javascriptName The value to check for JavaScript identifier validity.
3762
+ * @returns `true` if the value is a valid JavaScript name, false otherwise.
3686
3763
  * @public exported from `@promptbook/utils`
3687
3764
  */
3688
3765
  function isValidJavascriptName(javascriptName) {
@@ -3773,7 +3850,7 @@ const postprocessCommandParser = {
3773
3850
  /**
3774
3851
  * Tests if given string is valid pipeline URL URL.
3775
3852
  *
3776
- * Note: There are two simmilar functions:
3853
+ * Note: There are two similar functions:
3777
3854
  * - `isValidUrl` which tests any URL
3778
3855
  * - `isValidPipelineUrl` *(this one)* which tests just pipeline URL
3779
3856
  *
@@ -4175,7 +4252,7 @@ function parseCommand(raw, usagePlace) {
4175
4252
  // Arg1 Arg2 Arg3 | FOO
4176
4253
  {
4177
4254
  const commandNameRaw = items.slice(-1).join('_');
4178
- const args = items.slice(0, -1); // <- Note: This is probbably not correct
4255
+ const args = items.slice(0, -1); // <- Note: This is probably not correct
4179
4256
  const rawArgs = raw
4180
4257
  .substring(0, raw.length - commandNameRaw.length)
4181
4258
  .trim();
@@ -4194,7 +4271,10 @@ function parseCommand(raw, usagePlace) {
4194
4271
  `));
4195
4272
  }
4196
4273
  /**
4197
- * @@@
4274
+ * Generates a markdown-formatted message listing all supported commands
4275
+ * with their descriptions and documentation links
4276
+ *
4277
+ * @returns A formatted markdown string containing all available commands and their details
4198
4278
  */
4199
4279
  function getSupportedCommandsMessage() {
4200
4280
  return COMMANDS.flatMap(({ name, aliasNames, description, documentationUrl }) =>
@@ -4205,7 +4285,10 @@ function getSupportedCommandsMessage() {
4205
4285
  ]).join('\n');
4206
4286
  }
4207
4287
  /**
4208
- * @@@
4288
+ * Attempts to parse a command variant using the provided input parameters
4289
+ *
4290
+ * @param input Object containing command parsing information including raw command text and normalized values
4291
+ * @returns A parsed Command object if successful, or null if the command cannot be parsed
4209
4292
  */
4210
4293
  function parseCommandVariant(input) {
4211
4294
  const { commandNameRaw, usagePlace, normalized, args, raw, rawArgs } = input;
@@ -4252,7 +4335,7 @@ function parseCommandVariant(input) {
4252
4335
  }
4253
4336
 
4254
4337
  /**
4255
- * @@@
4338
+ * Extracts the interface (input and output parameters) from a pipeline.
4256
4339
  *
4257
4340
  * @deprecated https://github.com/webgptorg/promptbook/pull/186
4258
4341
  * @see https://github.com/webgptorg/promptbook/discussions/171
@@ -4285,7 +4368,7 @@ function getPipelineInterface(pipeline) {
4285
4368
  }
4286
4369
 
4287
4370
  /**
4288
- * @@@
4371
+ * Checks if two pipeline interfaces are structurally identical.
4289
4372
  *
4290
4373
  * @deprecated https://github.com/webgptorg/promptbook/pull/186
4291
4374
  * @see https://github.com/webgptorg/promptbook/discussions/171
@@ -4317,10 +4400,11 @@ function isPipelineInterfacesEqual(pipelineInterface1, pipelineInterface2) {
4317
4400
  }
4318
4401
 
4319
4402
  /**
4320
- * @@@
4403
+ * Checks if a given pipeline satisfies the requirements of a specified pipeline interface.
4321
4404
  *
4322
4405
  * @deprecated https://github.com/webgptorg/promptbook/pull/186
4323
4406
  * @see https://github.com/webgptorg/promptbook/discussions/171
4407
+ * @returns `true` if the pipeline implements the interface, `false` otherwise.
4324
4408
  *
4325
4409
  * @public exported from `@promptbook/core`
4326
4410
  */
@@ -4550,7 +4634,8 @@ function removeMarkdownComments(content) {
4550
4634
  }
4551
4635
 
4552
4636
  /**
4553
- * @@@
4637
+ * Utility to determine if a pipeline string is in flat format.
4638
+ * A flat pipeline is a simple text without proper structure (headers, blocks, etc).
4554
4639
  *
4555
4640
  * @public exported from `@promptbook/editable`
4556
4641
  */
@@ -4571,7 +4656,10 @@ function isFlatPipeline(pipelineString) {
4571
4656
  }
4572
4657
 
4573
4658
  /**
4574
- * @@@
4659
+ * Converts a pipeline structure to its string representation.
4660
+ *
4661
+ * Transforms a flat, simple pipeline into a properly formatted pipeline string
4662
+ * with sections for title, prompt, and return statement.
4575
4663
  *
4576
4664
  * @public exported from `@promptbook/editable`
4577
4665
  */
@@ -4628,7 +4716,7 @@ function deflatePipeline(pipelineString) {
4628
4716
  * Note: It can not work with html syntax and comments
4629
4717
  *
4630
4718
  * @param markdown any valid markdown
4631
- * @returns @@@
4719
+ * @returns An array of strings, each representing an individual list item found in the markdown
4632
4720
  * @public exported from `@promptbook/markdown-utils`
4633
4721
  */
4634
4722
  function extractAllListItemsFromMarkdown(markdown) {
@@ -4660,8 +4748,8 @@ function capitalize(word) {
4660
4748
  /**
4661
4749
  * Extracts all code blocks from markdown.
4662
4750
  *
4663
- * Note: There are multiple simmilar function:
4664
- * - `extractBlock` just extracts the content of the code block which is also used as build-in function for postprocessing
4751
+ * Note: There are multiple similar functions:
4752
+ * - `extractBlock` just extracts the content of the code block which is also used as built-in function for postprocessing
4665
4753
  * - `extractJsonBlock` extracts exactly one valid JSON code block
4666
4754
  * - `extractOneBlockFromMarkdown` extracts exactly one code block with language of the code block
4667
4755
  * - `extractAllBlocksFromMarkdown` extracts all code blocks with language of the code block
@@ -4711,7 +4799,7 @@ function extractAllBlocksFromMarkdown(markdown) {
4711
4799
  if (currentCodeBlock.content !== '') {
4712
4800
  currentCodeBlock.content += '\n';
4713
4801
  }
4714
- currentCodeBlock.content += line.split('\\`\\`\\`').join('```') /* <- TODO: Maybe make propper unescape */;
4802
+ currentCodeBlock.content += line.split('\\`\\`\\`').join('```') /* <- TODO: Maybe make proper unescape */;
4715
4803
  }
4716
4804
  }
4717
4805
  if (currentCodeBlock !== null) {
@@ -4728,8 +4816,8 @@ function extractAllBlocksFromMarkdown(markdown) {
4728
4816
  *
4729
4817
  * - When there are multiple or no code blocks the function throws a `ParseError`
4730
4818
  *
4731
- * Note: There are multiple simmilar function:
4732
- * - `extractBlock` just extracts the content of the code block which is also used as build-in function for postprocessing
4819
+ * Note: There are multiple similar functions:
4820
+ * - `extractBlock` just extracts the content of the code block which is also used as built-in function for postprocessing
4733
4821
  * - `extractJsonBlock` extracts exactly one valid JSON code block
4734
4822
  * - `extractOneBlockFromMarkdown` extracts exactly one code block with language of the code block
4735
4823
  * - `extractAllBlocksFromMarkdown` extracts all code blocks with language of the code block
@@ -4881,11 +4969,11 @@ function flattenMarkdown(markdown) {
4881
4969
  */
4882
4970
 
4883
4971
  /**
4884
- * @@@
4972
+ * Converts a title string into a normalized name.
4885
4973
  *
4886
- * @param value @@@
4887
- * @returns @@@
4888
- * @example @@@
4974
+ * @param value The title string to be converted to a name.
4975
+ * @returns A normalized name derived from the input title.
4976
+ * @example 'Hello World!' -> 'hello-world'
4889
4977
  * @public exported from `@promptbook/utils`
4890
4978
  */
4891
4979
  function titleToName(value) {
@@ -5050,7 +5138,7 @@ function extractParameterNamesFromTask(task) {
5050
5138
  * Compile pipeline from string (markdown) format to JSON format synchronously
5051
5139
  *
5052
5140
  * Note: There are 3 similar functions:
5053
- * - `compilePipeline` **(preferred)** - which propperly compiles the promptbook and use embedding for external knowledge
5141
+ * - `compilePipeline` **(preferred)** - which properly compiles the promptbook and uses embedding for external knowledge
5054
5142
  * - `parsePipeline` - use only if you need to compile promptbook synchronously and it contains NO external knowledge
5055
5143
  * - `preparePipeline` - just one step in the compilation process
5056
5144
  *
@@ -5487,7 +5575,7 @@ function parsePipeline(pipelineString) {
5487
5575
  * TODO: Use spaceTrim more effectively
5488
5576
  * TODO: [🧠] Parameter flags - isInput, isOutput, isInternal
5489
5577
  * TODO: [🥞] Not optimal parsing because `splitMarkdownIntoSections` is executed twice with same string, once through `flattenMarkdown` and second directly here
5490
- * TODO: [♈] Probbably move expectations from tasks to parameters
5578
+ * TODO: [♈] Probably move expectations from tasks to parameters
5491
5579
  * TODO: [🛠] Actions, instruments (and maybe knowledge) => Functions and tools
5492
5580
  * TODO: [🍙] Make some standard order of json properties
5493
5581
  */
@@ -5532,10 +5620,10 @@ class RemoteLlmExecutionTools {
5532
5620
  }
5533
5621
  get title() {
5534
5622
  // TODO: [🧠] Maybe fetch title+description from the remote server (as well as if model methods are defined)
5535
- return 'Remote server';
5623
+ return 'Promptbook remote server';
5536
5624
  }
5537
5625
  get description() {
5538
- return 'Use all models by your remote server';
5626
+ return `Models from Promptbook remote server ${this.options.remoteServerUrl}`;
5539
5627
  }
5540
5628
  /**
5541
5629
  * Check the configuration of all execution tools
@@ -5550,7 +5638,7 @@ class RemoteLlmExecutionTools {
5550
5638
  * List all available models that can be used
5551
5639
  */
5552
5640
  async listModels() {
5553
- // TODO: [👒] Listing models (and checking configuration) probbably should go through REST API not Socket.io
5641
+ // TODO: [👒] Listing models (and checking configuration) probably should go through REST API not Socket.io
5554
5642
  const socket = await createRemoteClient(this.options);
5555
5643
  socket.emit('listModels-request', {
5556
5644
  identification: this.options.identification,