@promptbook/openai 0.72.0-1 → 0.72.0-10

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 (210) hide show
  1. package/README.md +78 -64
  2. package/esm/index.es.js +142 -31
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/browser.index.d.ts +3 -1
  5. package/esm/typings/src/_packages/cli.index.d.ts +20 -0
  6. package/esm/typings/src/_packages/core.index.d.ts +36 -14
  7. package/esm/typings/src/_packages/documents.index.d.ts +8 -0
  8. package/esm/typings/src/_packages/legacy-documents.index.d.ts +8 -0
  9. package/esm/typings/src/_packages/markdown-utils.index.d.ts +6 -0
  10. package/esm/typings/src/_packages/node.index.d.ts +16 -6
  11. package/esm/typings/src/_packages/pdf.index.d.ts +8 -0
  12. package/esm/typings/src/_packages/types.index.d.ts +49 -27
  13. package/esm/typings/src/_packages/website-crawler.index.d.ts +8 -0
  14. package/esm/typings/src/cli/cli-commands/about.d.ts +1 -1
  15. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  16. package/esm/typings/src/cli/cli-commands/make.d.ts +1 -1
  17. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  18. package/esm/typings/src/cli/cli-commands/test-command.d.ts +13 -0
  19. package/esm/typings/src/cli/main.d.ts +1 -1
  20. package/esm/typings/src/cli/promptbookCli.d.ts +1 -1
  21. package/esm/typings/src/collection/constructors/createCollectionFromDirectory.d.ts +11 -6
  22. package/esm/typings/src/collection/constructors/createCollectionFromUrl.d.ts +1 -1
  23. package/esm/typings/src/commands/EXPECT/expectCommandParser.d.ts +1 -1
  24. package/esm/typings/src/commands/FOREACH/ForeachJson.d.ts +5 -1
  25. package/esm/typings/src/commands/FOREACH/foreachCommandParser.d.ts +1 -1
  26. package/esm/typings/src/commands/FORMAT/formatCommandParser.d.ts +1 -1
  27. package/esm/typings/src/commands/JOKER/jokerCommandParser.d.ts +1 -1
  28. package/esm/typings/src/commands/KNOWLEDGE/knowledgeCommandParser.d.ts +1 -1
  29. package/esm/typings/src/commands/KNOWLEDGE/utils/sourceContentToName.d.ts +11 -0
  30. package/esm/typings/src/commands/KNOWLEDGE/utils/sourceContentToName.test.d.ts +4 -0
  31. package/esm/typings/src/commands/MODEL/modelCommandParser.d.ts +1 -1
  32. package/esm/typings/src/commands/PARAMETER/parameterCommandParser.d.ts +1 -1
  33. package/esm/typings/src/commands/PERSONA/personaCommandParser.d.ts +1 -1
  34. package/esm/typings/src/commands/POSTPROCESS/postprocessCommandParser.d.ts +1 -1
  35. package/esm/typings/src/commands/PROMPTBOOK_VERSION/promptbookVersionCommandParser.d.ts +1 -1
  36. package/esm/typings/src/commands/TEMPLATE/templateCommandParser.d.ts +1 -1
  37. package/esm/typings/src/commands/URL/urlCommandParser.d.ts +1 -1
  38. package/esm/typings/src/commands/X_ACTION/actionCommandParser.d.ts +1 -1
  39. package/esm/typings/src/commands/X_INSTRUMENT/instrumentCommandParser.d.ts +1 -1
  40. package/esm/typings/src/commands/_BOILERPLATE/boilerplateCommandParser.d.ts +1 -1
  41. package/esm/typings/src/config.d.ts +16 -0
  42. package/esm/typings/src/conversion/pipelineStringToJson.d.ts +4 -15
  43. package/esm/typings/src/conversion/pipelineStringToJsonSync.d.ts +1 -1
  44. package/esm/typings/src/conversion/validation/_importPipeline.d.ts +1 -1
  45. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +5 -5
  46. package/esm/typings/src/{knowledge/dialogs → dialogs}/callback/CallbackInterfaceTools.d.ts +2 -2
  47. package/esm/typings/src/{knowledge/dialogs → dialogs}/callback/CallbackInterfaceToolsOptions.d.ts +3 -3
  48. package/esm/typings/src/{knowledge/dialogs → dialogs}/simple-prompt/SimplePromptInterfaceTools.d.ts +6 -6
  49. package/esm/typings/src/errors/AbstractFormatError.d.ts +11 -0
  50. package/esm/typings/src/errors/KnowledgeScrapeError.d.ts +9 -0
  51. package/esm/typings/src/errors/MissingToolsError.d.ts +9 -0
  52. package/esm/typings/src/execution/{CommonExecutionToolsOptions.d.ts → CommonToolsOptions.d.ts} +1 -1
  53. package/esm/typings/src/execution/ExecutionTools.d.ts +29 -9
  54. package/esm/typings/src/execution/FilesystemTools.d.ts +9 -0
  55. package/esm/typings/src/execution/PipelineExecutor.d.ts +1 -0
  56. package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorOptions.d.ts +5 -2
  57. package/esm/typings/src/execution/createPipelineExecutor/00-CreatePipelineExecutorSettings.d.ts +2 -13
  58. package/esm/typings/src/execution/createPipelineExecutor/00-createPipelineExecutor.d.ts +3 -0
  59. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +4 -1
  60. package/esm/typings/src/execution/createPipelineExecutor/20-executeTemplate.d.ts +4 -6
  61. package/esm/typings/src/execution/createPipelineExecutor/{30-executeFormatCells.d.ts → 30-executeFormatSubvalues.d.ts} +2 -6
  62. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +1 -6
  63. package/esm/typings/src/execution/embeddingVectorToString.d.ts +1 -1
  64. package/esm/typings/src/execution/translation/automatic-translate/translateMessages.d.ts +4 -0
  65. package/esm/typings/src/execution/utils/$provideExecutionToolsForNode.d.ts +13 -0
  66. package/esm/typings/src/execution/utils/forEachAsync.d.ts +1 -0
  67. package/esm/typings/src/formats/_common/FormatSubvalueDefinition.d.ts +2 -1
  68. package/esm/typings/src/formats/csv/CsvFormatError.d.ts +10 -0
  69. package/esm/typings/src/llm-providers/_common/{$llmToolsMetadataRegister.d.ts → register/$llmToolsMetadataRegister.d.ts} +4 -1
  70. package/esm/typings/src/llm-providers/_common/{$llmToolsRegister.d.ts → register/$llmToolsRegister.d.ts} +5 -2
  71. package/esm/typings/src/llm-providers/_common/{createLlmToolsFromConfigurationFromEnv.d.ts → register/$provideLlmToolsConfigurationFromEnv.d.ts} +3 -3
  72. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForCli.d.ts +15 -0
  73. package/esm/typings/src/llm-providers/_common/{getLlmToolsForTestingAndScriptsAndPlayground.d.ts → register/$provideLlmToolsForTestingAndScriptsAndPlayground.d.ts} +4 -3
  74. package/esm/typings/src/llm-providers/_common/{createLlmToolsFromEnv.d.ts → register/$provideLlmToolsFromEnv.d.ts} +6 -5
  75. package/esm/typings/src/llm-providers/_common/{$registeredLlmToolsMessage.d.ts → register/$registeredLlmToolsMessage.d.ts} +5 -2
  76. package/esm/typings/src/llm-providers/_common/{LlmToolsConfiguration.d.ts → register/LlmToolsConfiguration.d.ts} +5 -4
  77. package/esm/typings/src/llm-providers/_common/{LlmToolsMetadata.d.ts → register/LlmToolsMetadata.d.ts} +5 -4
  78. package/esm/typings/src/llm-providers/_common/{LlmToolsOptions.d.ts → register/LlmToolsOptions.d.ts} +4 -1
  79. package/esm/typings/src/llm-providers/_common/{createLlmToolsFromConfiguration.d.ts → register/createLlmToolsFromConfiguration.d.ts} +5 -4
  80. package/esm/typings/src/llm-providers/anthropic-claude/AnthropicClaudeExecutionToolsOptions.d.ts +5 -5
  81. package/esm/typings/src/llm-providers/anthropic-claude/playground/playground.d.ts +3 -2
  82. package/esm/typings/src/llm-providers/anthropic-claude/register-configuration.d.ts +4 -3
  83. package/esm/typings/src/llm-providers/anthropic-claude/register-constructor.d.ts +4 -3
  84. package/esm/typings/src/llm-providers/azure-openai/AzureOpenAiExecutionTools.d.ts +6 -0
  85. package/esm/typings/src/llm-providers/azure-openai/AzureOpenAiExecutionToolsOptions.d.ts +4 -3
  86. package/esm/typings/src/llm-providers/azure-openai/playground/playground.d.ts +1 -0
  87. package/esm/typings/src/llm-providers/azure-openai/register-configuration.d.ts +4 -3
  88. package/esm/typings/src/llm-providers/azure-openai/register-constructor.d.ts +4 -3
  89. package/esm/typings/src/llm-providers/langtail/LangtailExecutionTools.d.ts +1 -1
  90. package/esm/typings/src/llm-providers/langtail/playground/playground.d.ts +3 -0
  91. package/esm/typings/src/llm-providers/mocked/MockedEchoLlmExecutionTools.d.ts +3 -3
  92. package/esm/typings/src/llm-providers/mocked/MockedFackedLlmExecutionTools.d.ts +3 -3
  93. package/esm/typings/src/llm-providers/multiple/MultipleLlmExecutionTools.d.ts +1 -0
  94. package/esm/typings/src/llm-providers/multiple/playground/playground.d.ts +3 -0
  95. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +1 -1
  96. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +1 -1
  97. package/esm/typings/src/llm-providers/openai/OpenAiExecutionToolsOptions.d.ts +4 -4
  98. package/esm/typings/src/llm-providers/openai/playground/playground.d.ts +2 -1
  99. package/esm/typings/src/llm-providers/openai/register-configuration.d.ts +5 -4
  100. package/esm/typings/src/llm-providers/openai/register-constructor.d.ts +5 -4
  101. package/esm/typings/src/llm-providers/remote/RemoteLlmExecutionTools.d.ts +3 -3
  102. package/esm/typings/src/llm-providers/remote/interfaces/PromptbookServer_ListModels_Request.d.ts +16 -7
  103. package/esm/typings/src/llm-providers/remote/interfaces/PromptbookServer_ListModels_Response.d.ts +2 -2
  104. package/esm/typings/src/llm-providers/remote/interfaces/PromptbookServer_Prompt_Request.d.ts +7 -13
  105. package/esm/typings/src/llm-providers/remote/interfaces/PromptbookServer_Prompt_Response.d.ts +1 -1
  106. package/esm/typings/src/llm-providers/remote/interfaces/RemoteLlmExecutionToolsOptions.d.ts +11 -16
  107. package/esm/typings/src/llm-providers/remote/interfaces/RemoteServerOptions.d.ts +23 -9
  108. package/esm/typings/src/llm-providers/remote/playground/playground.d.ts +3 -0
  109. package/esm/typings/src/llm-providers/remote/startRemoteServer.d.ts +1 -1
  110. package/esm/typings/src/personas/preparePersona.d.ts +3 -2
  111. package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +68 -0
  112. package/esm/typings/src/prepare/preparePipeline.d.ts +3 -2
  113. package/esm/typings/src/prepare/prepareTemplates.d.ts +3 -2
  114. package/esm/typings/src/scrapers/_common/Converter.d.ts +22 -0
  115. package/esm/typings/src/scrapers/_common/Scraper.d.ts +66 -0
  116. package/esm/typings/src/scrapers/_common/ScraperIntermediateSource.d.ts +11 -0
  117. package/esm/typings/src/{knowledge/prepare-knowledge → scrapers}/_common/prepareKnowledgePieces.d.ts +5 -4
  118. package/esm/typings/src/scrapers/_common/register/$provideFilesystemForNode.d.ts +11 -0
  119. package/esm/typings/src/scrapers/_common/register/$provideScrapersForBrowser.d.ts +12 -0
  120. package/esm/typings/src/scrapers/_common/register/$provideScrapersForNode.d.ts +15 -0
  121. package/esm/typings/src/scrapers/_common/register/$registeredScrapersMessage.d.ts +12 -0
  122. package/esm/typings/src/scrapers/_common/register/$scrapersMetadataRegister.d.ts +13 -0
  123. package/esm/typings/src/scrapers/_common/register/$scrapersRegister.d.ts +13 -0
  124. package/esm/typings/src/scrapers/_common/register/ScraperAndConverterMetadata.d.ts +41 -0
  125. package/esm/typings/src/scrapers/_common/register/ScraperConstructor.d.ts +12 -0
  126. package/esm/typings/src/scrapers/_common/utils/getScraperIntermediateSource.d.ts +34 -0
  127. package/esm/typings/src/scrapers/_common/utils/getScraperIntermediateSource.test.d.ts +4 -0
  128. package/esm/typings/src/scrapers/_common/utils/makeKnowledgeSourceHandler.d.ts +11 -0
  129. package/esm/typings/src/scrapers/document/DocumentScraper.d.ts +43 -0
  130. package/esm/typings/src/scrapers/document/DocumentScraper.test.d.ts +4 -0
  131. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +20 -0
  132. package/esm/typings/src/scrapers/document/playground/document-scraper-playground.d.ts +5 -0
  133. package/esm/typings/src/scrapers/document/register-constructor.d.ts +13 -0
  134. package/esm/typings/src/scrapers/document/register-metadata.d.ts +24 -0
  135. package/esm/typings/src/scrapers/document-legacy/LegacyDocumentScraper.d.ts +43 -0
  136. package/esm/typings/src/scrapers/document-legacy/LegacyDocumentScraper.test.d.ts +4 -0
  137. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +20 -0
  138. package/esm/typings/src/scrapers/document-legacy/playground/legacy-document-scraper-playground.d.ts +5 -0
  139. package/esm/typings/src/scrapers/document-legacy/register-constructor.d.ts +13 -0
  140. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +24 -0
  141. package/esm/typings/src/scrapers/markdown/MarkdownScraper.d.ts +29 -0
  142. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +20 -0
  143. package/esm/typings/src/scrapers/markdown/playground/markdown-scraper-playground.d.ts +5 -0
  144. package/esm/typings/src/scrapers/markdown/register-constructor.d.ts +13 -0
  145. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +24 -0
  146. package/esm/typings/src/scrapers/pdf/PdfScraper.d.ts +40 -0
  147. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +20 -0
  148. package/esm/typings/src/scrapers/pdf/playground/pdf-scraper-playground.d.ts +5 -0
  149. package/esm/typings/src/scrapers/pdf/register-constructor.d.ts +13 -0
  150. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +24 -0
  151. package/esm/typings/src/scrapers/website/WebsiteScraper.d.ts +47 -0
  152. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +20 -0
  153. package/esm/typings/src/scrapers/website/playground/website-scraper-playground.d.ts +5 -0
  154. package/esm/typings/src/scrapers/website/register-constructor.d.ts +13 -0
  155. package/esm/typings/src/scrapers/website/register-metadata.d.ts +24 -0
  156. package/esm/typings/src/scrapers/website/utils/markdownConverter.d.ts +12 -0
  157. package/esm/typings/src/scripting/javascript/JavascriptExecutionToolsOptions.d.ts +2 -2
  158. package/esm/typings/src/scripting/python/PythonExecutionTools.d.ts +3 -3
  159. package/esm/typings/src/scripting/typescript/TypescriptExecutionTools.d.ts +3 -3
  160. package/esm/typings/src/storage/{files-storage/FilesStorage.d.ts → file-cache-storage/FileCacheStorage.d.ts} +7 -5
  161. package/esm/typings/src/storage/file-cache-storage/FileCacheStorageOptions.d.ts +10 -0
  162. package/esm/typings/src/storage/{files-storage → file-cache-storage}/utils/nameToSubfolderPath.d.ts +1 -1
  163. package/esm/typings/src/storage/local-storage/getLocalStorage.d.ts +1 -1
  164. package/esm/typings/src/storage/local-storage/getSessionStorage.d.ts +1 -1
  165. package/esm/typings/src/storage/{utils → memory/utils}/PrefixStorage.d.ts +1 -1
  166. package/esm/typings/src/storage/{utils → memory/utils}/makePromptbookStorageFromWebStorage.d.ts +1 -1
  167. package/esm/typings/src/types/PipelineJson/KnowledgeSourceJson.d.ts +9 -2
  168. package/esm/typings/src/types/PipelineJson/ParameterJson.d.ts +1 -1
  169. package/esm/typings/src/types/PipelineJson/PipelineJson.d.ts +2 -2
  170. package/esm/typings/src/types/Prompt.d.ts +1 -0
  171. package/esm/typings/src/types/execution-report/ExecutionReportJson.d.ts +0 -3
  172. package/esm/typings/src/types/execution-report/executionReportJsonToString.d.ts +2 -1
  173. package/esm/typings/src/types/typeAliases.d.ts +27 -20
  174. package/esm/typings/src/utils/$Register.d.ts +19 -6
  175. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +14 -0
  176. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +17 -0
  177. package/esm/typings/src/utils/execCommand/IExecCommandOptions.d.ts +23 -0
  178. package/esm/typings/src/utils/execCommand/execCommandNormalizeOptions.d.ts +10 -0
  179. package/esm/typings/src/utils/files/extensionToMimeType.d.ts +8 -0
  180. package/esm/typings/src/utils/files/extensionToMimeType.test.d.ts +1 -0
  181. package/esm/typings/src/utils/files/getFileExtension.d.ts +8 -0
  182. package/esm/typings/src/utils/files/getFileExtension.test.d.ts +1 -0
  183. package/esm/typings/src/utils/files/isDirectoryExisting.d.ts +14 -0
  184. package/esm/typings/src/utils/files/isDirectoryExisting.test.d.ts +1 -0
  185. package/esm/typings/src/utils/files/isFileExisting.d.ts +13 -0
  186. package/esm/typings/src/utils/files/isFileExisting.test.d.ts +1 -0
  187. package/esm/typings/src/utils/files/listAllFiles.d.ts +17 -0
  188. package/esm/typings/src/utils/files/listAllFiles.test.d.ts +1 -0
  189. package/esm/typings/src/utils/validators/filePath/isValidFilePath.d.ts +2 -2
  190. package/package.json +3 -3
  191. package/umd/index.umd.js +142 -31
  192. package/umd/index.umd.js.map +1 -1
  193. package/esm/typings/src/knowledge/prepare-knowledge/_common/Scraper.d.ts +0 -37
  194. package/esm/typings/src/knowledge/prepare-knowledge/markdown/playground/markdown-knowledge-playground.d.ts +0 -2
  195. package/esm/typings/src/knowledge/prepare-knowledge/markdown/prepareKnowledgeFromMarkdown.d.ts +0 -14
  196. package/esm/typings/src/knowledge/prepare-knowledge/pdf/prepareKnowledgeFromPdf.d.ts +0 -15
  197. package/esm/typings/src/llm-providers/_common/getLlmToolsForCli.d.ts +0 -22
  198. package/esm/typings/src/prepare/PrepareOptions.d.ts +0 -22
  199. package/esm/typings/src/storage/files-storage/FilesStorageOptions.d.ts +0 -10
  200. package/esm/typings/src/utils/files/$isDirectoryExisting.d.ts +0 -15
  201. package/esm/typings/src/utils/files/$isFileExisting.d.ts +0 -14
  202. package/esm/typings/src/utils/files/$listAllFiles.d.ts +0 -17
  203. /package/esm/typings/src/{knowledge/dialogs → dialogs}/user-interface-execution-tools.test.d.ts +0 -0
  204. /package/esm/typings/src/{knowledge/prepare-knowledge → scrapers}/_common/prepareKnowledgePieces.test.d.ts +0 -0
  205. /package/esm/typings/src/{knowledge/prepare-knowledge/markdown/prepareKnowledgeFromMarkdown.test.d.ts → scrapers/markdown/MarkdownScraper.test.d.ts} +0 -0
  206. /package/esm/typings/src/{knowledge/prepare-knowledge/pdf/prepareKnowledgeFromPdf.test.d.ts → scrapers/website/WebsiteScraper.test.d.ts} +0 -0
  207. /package/esm/typings/src/{storage/files-storage/utils/nameToSubfolderPath.test.d.ts → scrapers/website/utils/markdownConverter.test.d.ts} +0 -0
  208. /package/esm/typings/src/{utils/files/$isDirectoryExisting.test.d.ts → storage/file-cache-storage/utils/nameToSubfolderPath.test.d.ts} +0 -0
  209. /package/esm/typings/src/utils/{files/$isFileExisting.test.d.ts → execCommand/execCommand.test.d.ts} +0 -0
  210. /package/esm/typings/src/utils/{files/$listAllFiles.test.d.ts → execCommand/execCommandNormalizeOptions.test.d.ts} +0 -0
package/README.md CHANGED
@@ -20,6 +20,12 @@ Supercharge your use of large language models
20
20
 
21
21
  - ✨ **Support of [OpenAI o1 model](https://openai.com/o1/)**
22
22
 
23
+ <blockquote style="color: #ff8811">
24
+ <b>⚠ Warning:</b> This is a pre-release version of the library. It is not yet ready for production use. Please look at <a href="https://www.npmjs.com/package/@promptbook/core?activeTab=versions">latest stable release</a>.
25
+ </blockquote>
26
+
27
+
28
+
23
29
  ## 📦 Package `@promptbook/openai`
24
30
 
25
31
  - Promptbooks are [divided into several](#-packages) packages, all are published from [single monorepo](https://github.com/webgptorg/promptbook).
@@ -41,31 +47,36 @@ npm install @promptbook/openai
41
47
 
42
48
  ```typescript
43
49
  import { createPipelineExecutor, assertsExecutionSuccessful } from '@promptbook/core';
44
- import { createCollectionFromDirectory } from '@promptbook/node';
50
+ import {
51
+ createCollectionFromDirectory,
52
+ $provideExecutionToolsForNode,
53
+ $provideFilesystemForNode,
54
+ } from '@promptbook/node';
45
55
  import { JavascriptExecutionTools } from '@promptbook/execute-javascript';
46
56
  import { OpenAiExecutionTools } from '@promptbook/openai';
47
57
 
58
+ // ▶ Prepare tools
59
+ const fs = $provideFilesystemForNode();
60
+ const llm = new OpenAiExecutionTools(
61
+ // <- TODO: [🧱] Implement in a functional (not new Class) way
62
+ {
63
+ isVerbose: true,
64
+ apiKey: process.env.OPENAI_API_KEY,
65
+ },
66
+ );
67
+ const tools = {
68
+ llm,
69
+ fs,
70
+ scrapers: await $provideScrapersForNode({ fs, llm }),
71
+ script: [new JavascriptExecutionTools()],
72
+ };
73
+
48
74
  // ▶ Create whole pipeline collection
49
- const collection = await createCollectionFromDirectory('./promptbook-collection');
75
+ const collection = await createCollectionFromDirectory('./promptbook-collection', tools);
50
76
 
51
77
  // ▶ Get single Pipeline
52
78
  const pipeline = await collection.getPipelineByUrl(`https://promptbook.studio/my-collection/write-article.ptbk.md`);
53
79
 
54
- // ▶ Prepare tools
55
- const tools = {
56
- llm: new OpenAiExecutionTools(
57
- // <- TODO: [🧱] Implement in a functional (not new Class) way
58
- {
59
- isVerbose: true,
60
- apiKey: process.env.OPENAI_API_KEY,
61
- },
62
- ),
63
- script: [
64
- new JavascriptExecutionTools(),
65
- // <- TODO: [🧱] Implement in a functional (not new Class) way
66
- ],
67
- };
68
-
69
80
  // ▶ Create executor - the function that will execute the Pipeline
70
81
  const pipelineExecutor = createPipelineExecutor({ pipeline, tools });
71
82
 
@@ -90,29 +101,23 @@ OpenAiExecutionTools.createAssistantSubtools
90
101
 
91
102
  ## 🧙‍♂️ Connect to LLM providers automatically
92
103
 
93
- You can just use `createLlmToolsFromEnv` function to create LLM tools from environment variables like `OPENAI_API_KEY` and `ANTHROPIC_CLAUDE_API_KEY` automatically.
104
+ You can just use `$provideExecutionToolsForNode` function to create all required tools from environment variables like `OPENAI_API_KEY` and `ANTHROPIC_CLAUDE_API_KEY` automatically.
94
105
 
95
106
  ```typescript
96
107
  import { createPipelineExecutor, createCollectionFromDirectory, assertsExecutionSuccessful } from '@promptbook/core';
97
108
  import { JavascriptExecutionTools } from '@promptbook/execute-javascript';
98
- import { createLlmToolsFromEnv } from '@promptbook/node';
109
+ import { $provideExecutionToolsForNode } from '@promptbook/node';
110
+ import { $provideFilesystemForNode } from '@promptbook/node';
111
+
112
+ // ▶ Prepare tools
113
+ const tools = await $provideExecutionToolsForNode();
99
114
 
100
115
  // ▶ Create whole pipeline collection
101
- const collection = await createCollectionFromDirectory('./promptbook-collection');
116
+ const collection = await createCollectionFromDirectory('./promptbook-collection', tools);
102
117
 
103
118
  // ▶ Get single Pipeline
104
119
  const pipeline = await collection.getPipelineByUrl(`https://promptbook.studio/my-collection/write-article.ptbk.md`);
105
120
 
106
- // ▶ Prepare multiple tools
107
- const tools = {
108
- // Note: 🧙‍♂️ Just call `createLlmToolsFromEnv` to automatically connect to all configured providers
109
- llm: createLlmToolsFromEnv(),
110
- script: [
111
- new JavascriptExecutionTools(),
112
- // <- TODO: [🧱] Implement in a functional (not new Class) way
113
- ],
114
- };
115
-
116
121
  // ▶ Create executor - the function that will execute the Pipeline
117
122
  const pipelineExecutor = createPipelineExecutor({ pipeline, tools });
118
123
 
@@ -136,50 +141,55 @@ You can use multiple LLM providers in one Promptbook execution. The best model w
136
141
 
137
142
  ```typescript
138
143
  import { createPipelineExecutor, assertsExecutionSuccessful } from '@promptbook/core';
139
- import { createCollectionFromDirectory } from '@promptbook/node';
144
+ import {
145
+ createCollectionFromDirectory,
146
+ $provideExecutionToolsForNode,
147
+ $provideFilesystemForNode,
148
+ } from '@promptbook/node';
140
149
  import { JavascriptExecutionTools } from '@promptbook/execute-javascript';
141
150
  import { OpenAiExecutionTools } from '@promptbook/openai';
142
151
  import { AnthropicClaudeExecutionTools } from '@promptbook/anthropic-claude';
143
152
  import { AzureOpenAiExecutionTools } from '@promptbook/azure-openai';
144
153
 
154
+ // ▶ Prepare multiple tools
155
+ const fs = $provideFilesystemForNode();
156
+ const llm = [
157
+ // Note: You can use multiple LLM providers in one Promptbook execution.
158
+ // The best model will be chosen automatically according to the prompt and the model's capabilities.
159
+ new OpenAiExecutionTools(
160
+ // <- TODO: [🧱] Implement in a functional (not new Class) way
161
+ {
162
+ apiKey: process.env.OPENAI_API_KEY,
163
+ },
164
+ ),
165
+ new AnthropicClaudeExecutionTools(
166
+ // <- TODO: [🧱] Implement in a functional (not new Class) way
167
+ {
168
+ apiKey: process.env.ANTHROPIC_CLAUDE_API_KEY,
169
+ },
170
+ ),
171
+ new AzureOpenAiExecutionTools(
172
+ // <- TODO: [🧱] Implement in a functional (not new Class) way
173
+ {
174
+ resourceName: process.env.AZUREOPENAI_RESOURCE_NAME,
175
+ deploymentName: process.env.AZUREOPENAI_DEPLOYMENT_NAME,
176
+ apiKey: process.env.AZUREOPENAI_API_KEY,
177
+ },
178
+ ),
179
+ ];
180
+ const tools = {
181
+ llm,
182
+ fs,
183
+ scrapers: await $provideScrapersForNode({ fs, llm }),
184
+ script: [new JavascriptExecutionTools()],
185
+ };
186
+
145
187
  // ▶ Create whole pipeline collection
146
- const collection = await createCollectionFromDirectory('./promptbook-collection');
188
+ const collection = await createCollectionFromDirectory('./promptbook-collection', tools);
147
189
 
148
190
  // ▶ Get single Pipeline
149
191
  const pipeline = await collection.getPipelineByUrl(`https://promptbook.studio/my-collection/write-article.ptbk.md`);
150
192
 
151
- // ▶ Prepare multiple tools
152
- const tools = {
153
- llm: [
154
- // Note: You can use multiple LLM providers in one Promptbook execution.
155
- // The best model will be chosen automatically according to the prompt and the model's capabilities.
156
- new OpenAiExecutionTools(
157
- // <- TODO: [🧱] Implement in a functional (not new Class) way
158
- {
159
- apiKey: process.env.OPENAI_API_KEY,
160
- },
161
- ),
162
- new AnthropicClaudeExecutionTools(
163
- // <- TODO: [🧱] Implement in a functional (not new Class) way
164
- {
165
- apiKey: process.env.ANTHROPIC_CLAUDE_API_KEY,
166
- },
167
- ),
168
- new AzureOpenAiExecutionTools(
169
- // <- TODO: [🧱] Implement in a functional (not new Class) way
170
- {
171
- resourceName: process.env.AZUREOPENAI_RESOURCE_NAME,
172
- deploymentName: process.env.AZUREOPENAI_DEPLOYMENT_NAME,
173
- apiKey: process.env.AZUREOPENAI_API_KEY,
174
- },
175
- ),
176
- ],
177
- script: [
178
- new JavascriptExecutionTools(),
179
- // <- TODO: [🧱] Implement in a functional (not new Class) way
180
- ],
181
- };
182
-
183
193
  // ▶ Create executor - the function that will execute the Pipeline
184
194
  const pipelineExecutor = createPipelineExecutor({ pipeline, tools });
185
195
 
@@ -495,6 +505,10 @@ Or you can install them separately:
495
505
  - **[@promptbook/fake-llm](https://www.npmjs.com/package/@promptbook/fake-llm)** - Mocked execution tools for testing the library and saving the tokens
496
506
  - **[@promptbook/remote-client](https://www.npmjs.com/package/@promptbook/remote-client)** - Remote client for remote execution of promptbooks
497
507
  - **[@promptbook/remote-server](https://www.npmjs.com/package/@promptbook/remote-server)** - Remote server for remote execution of promptbooks
508
+ - **[@promptbook/pdf](https://www.npmjs.com/package/@promptbook/pdf)** - Read knowledge from `.pdf` documents
509
+ - **[@promptbook/documents](https://www.npmjs.com/package/@promptbook/documents)** - Read knowledge from documents like `.docx`, `.odt`,…
510
+ - **[@promptbook/legacy-documents](https://www.npmjs.com/package/@promptbook/legacy-documents)** - Read knowledge from legacy documents like `.doc`, `.rtf`,…
511
+ - **[@promptbook/website-crawler](https://www.npmjs.com/package/@promptbook/website-crawler)** - Crawl knowledge from the web
498
512
  - **[@promptbook/types](https://www.npmjs.com/package/@promptbook/types)** - Just typescript types used in the library
499
513
  - **[@promptbook/cli](https://www.npmjs.com/package/@promptbook/cli)** - Command line interface utilities for promptbooks
500
514
 
package/esm/index.es.js CHANGED
@@ -6,8 +6,8 @@ import OpenAI from 'openai';
6
6
  /**
7
7
  * The version of the Promptbook library
8
8
  */
9
- var PROMPTBOOK_VERSION = '0.72.0-0';
10
- // TODO:[main] !!!! List here all the versions and annotate + put into script
9
+ var PROMPTBOOK_VERSION = '0.72.0-9';
10
+ // TODO: [main] !!!! List here all the versions and annotate + put into script
11
11
 
12
12
  /*! *****************************************************************************
13
13
  Copyright (c) Microsoft Corporation.
@@ -1278,7 +1278,7 @@ var OPENAI_MODELS = $asDeeplyFrozenSerializableJson('OPENAI_MODELS', [
1278
1278
  prompt: computeUsage("$5.00 / 1M tokens"),
1279
1279
  output: computeUsage("$15.00 / 1M tokens"),
1280
1280
  },
1281
- //TODO:[main] !!!!!! Add gpt-4o-mini-2024-07-18 and all others to be up to date
1281
+ //TODO: [main] !!! Add gpt-4o-mini-2024-07-18 and all others to be up to date
1282
1282
  },
1283
1283
  /**/
1284
1284
  /**/
@@ -1308,7 +1308,7 @@ var OPENAI_MODELS = $asDeeplyFrozenSerializableJson('OPENAI_MODELS', [
1308
1308
  modelVariant: 'CHAT',
1309
1309
  modelTitle: 'o1-preview-2024-09-12',
1310
1310
  modelName: 'o1-preview-2024-09-12',
1311
- // <- TODO:[main] !!!!!! Some better system to organize theese date suffixes and versions
1311
+ // <- TODO: [main] !!! Some better system to organize theese date suffixes and versions
1312
1312
  pricing: {
1313
1313
  prompt: computeUsage("$15.00 / 1M tokens"),
1314
1314
  output: computeUsage("$60.00 / 1M tokens"),
@@ -1413,7 +1413,6 @@ var OpenAiExecutionTools = /** @class */ (function () {
1413
1413
  * @param options which are relevant are directly passed to the OpenAI client
1414
1414
  */
1415
1415
  function OpenAiExecutionTools(options) {
1416
- if (options === void 0) { options = {}; }
1417
1416
  this.options = options;
1418
1417
  /**
1419
1418
  * OpenAI API client.
@@ -1441,8 +1440,8 @@ var OpenAiExecutionTools = /** @class */ (function () {
1441
1440
  if (this.client === null) {
1442
1441
  openAiOptions = __assign({}, this.options);
1443
1442
  delete openAiOptions.isVerbose;
1444
- delete openAiOptions.user;
1445
- this.client = new OpenAI(__assign({}, openAiOptions));
1443
+ delete openAiOptions.userId;
1444
+ this.client = new OpenAI(openAiOptions);
1446
1445
  }
1447
1446
  return [2 /*return*/, this.client];
1448
1447
  });
@@ -1489,10 +1488,12 @@ var OpenAiExecutionTools = /** @class */ (function () {
1489
1488
  * Calls OpenAI API to use a chat model.
1490
1489
  */
1491
1490
  OpenAiExecutionTools.prototype.callChatModel = function (prompt) {
1491
+ var _a;
1492
1492
  return __awaiter(this, void 0, void 0, function () {
1493
1493
  var content, parameters, modelRequirements, format, client, modelName, modelSettings, rawPromptContent, rawRequest, start, complete, rawResponse, resultContent, usage;
1494
- return __generator(this, function (_a) {
1495
- switch (_a.label) {
1494
+ var _this = this;
1495
+ return __generator(this, function (_b) {
1496
+ switch (_b.label) {
1496
1497
  case 0:
1497
1498
  if (this.options.isVerbose) {
1498
1499
  console.info('💬 OpenAI callChatModel call', { prompt: prompt });
@@ -1500,7 +1501,7 @@ var OpenAiExecutionTools = /** @class */ (function () {
1500
1501
  content = prompt.content, parameters = prompt.parameters, modelRequirements = prompt.modelRequirements, format = prompt.format;
1501
1502
  return [4 /*yield*/, this.getClient()];
1502
1503
  case 1:
1503
- client = _a.sent();
1504
+ client = _b.sent();
1504
1505
  // TODO: [☂] Use here more modelRequirements
1505
1506
  if (modelRequirements.modelVariant !== 'CHAT') {
1506
1507
  throw new PipelineExecutionError('Use callChatModel only for CHAT variant');
@@ -1532,14 +1533,19 @@ var OpenAiExecutionTools = /** @class */ (function () {
1532
1533
  role: 'user',
1533
1534
  content: rawPromptContent,
1534
1535
  },
1535
- ], false), user: this.options.user });
1536
+ ], false), user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString() });
1536
1537
  start = getCurrentIsoDate();
1537
1538
  if (this.options.isVerbose) {
1538
1539
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
1539
1540
  }
1540
- return [4 /*yield*/, client.chat.completions.create(rawRequest)];
1541
+ return [4 /*yield*/, client.chat.completions.create(rawRequest).catch(function (error) {
1542
+ if (_this.options.isVerbose) {
1543
+ console.info(colors.bgRed('error'), error);
1544
+ }
1545
+ throw error;
1546
+ })];
1541
1547
  case 2:
1542
- rawResponse = _a.sent();
1548
+ rawResponse = _b.sent();
1543
1549
  if (this.options.isVerbose) {
1544
1550
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
1545
1551
  }
@@ -1578,10 +1584,12 @@ var OpenAiExecutionTools = /** @class */ (function () {
1578
1584
  * Calls OpenAI API to use a complete model.
1579
1585
  */
1580
1586
  OpenAiExecutionTools.prototype.callCompletionModel = function (prompt) {
1587
+ var _a;
1581
1588
  return __awaiter(this, void 0, void 0, function () {
1582
1589
  var content, parameters, modelRequirements, client, modelName, modelSettings, rawPromptContent, rawRequest, start, complete, rawResponse, resultContent, usage;
1583
- return __generator(this, function (_a) {
1584
- switch (_a.label) {
1590
+ var _this = this;
1591
+ return __generator(this, function (_b) {
1592
+ switch (_b.label) {
1585
1593
  case 0:
1586
1594
  if (this.options.isVerbose) {
1587
1595
  console.info('🖋 OpenAI callCompletionModel call', { prompt: prompt });
@@ -1589,7 +1597,7 @@ var OpenAiExecutionTools = /** @class */ (function () {
1589
1597
  content = prompt.content, parameters = prompt.parameters, modelRequirements = prompt.modelRequirements;
1590
1598
  return [4 /*yield*/, this.getClient()];
1591
1599
  case 1:
1592
- client = _a.sent();
1600
+ client = _b.sent();
1593
1601
  // TODO: [☂] Use here more modelRequirements
1594
1602
  if (modelRequirements.modelVariant !== 'COMPLETION') {
1595
1603
  throw new PipelineExecutionError('Use callCompletionModel only for COMPLETION variant');
@@ -1604,14 +1612,19 @@ var OpenAiExecutionTools = /** @class */ (function () {
1604
1612
  // <- Note: [🧆]
1605
1613
  };
1606
1614
  rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: modelName }));
1607
- rawRequest = __assign(__assign({}, modelSettings), { prompt: rawPromptContent, user: this.options.user });
1615
+ rawRequest = __assign(__assign({}, modelSettings), { prompt: rawPromptContent, user: (_a = this.options.userId) === null || _a === void 0 ? void 0 : _a.toString() });
1608
1616
  start = getCurrentIsoDate();
1609
1617
  if (this.options.isVerbose) {
1610
1618
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
1611
1619
  }
1612
- return [4 /*yield*/, client.completions.create(rawRequest)];
1620
+ return [4 /*yield*/, client.completions.create(rawRequest).catch(function (error) {
1621
+ if (_this.options.isVerbose) {
1622
+ console.info(colors.bgRed('error'), error);
1623
+ }
1624
+ throw error;
1625
+ })];
1613
1626
  case 2:
1614
- rawResponse = _a.sent();
1627
+ rawResponse = _b.sent();
1615
1628
  if (this.options.isVerbose) {
1616
1629
  console.info(colors.bgWhite('rawResponse'), JSON.stringify(rawResponse, null, 4));
1617
1630
  }
@@ -1649,6 +1662,7 @@ var OpenAiExecutionTools = /** @class */ (function () {
1649
1662
  OpenAiExecutionTools.prototype.callEmbeddingModel = function (prompt) {
1650
1663
  return __awaiter(this, void 0, void 0, function () {
1651
1664
  var content, parameters, modelRequirements, client, modelName, rawPromptContent, rawRequest, start, complete, rawResponse, resultContent, usage;
1665
+ var _this = this;
1652
1666
  return __generator(this, function (_a) {
1653
1667
  switch (_a.label) {
1654
1668
  case 0:
@@ -1673,7 +1687,12 @@ var OpenAiExecutionTools = /** @class */ (function () {
1673
1687
  if (this.options.isVerbose) {
1674
1688
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
1675
1689
  }
1676
- return [4 /*yield*/, client.embeddings.create(rawRequest)];
1690
+ return [4 /*yield*/, client.embeddings.create(rawRequest).catch(function (error) {
1691
+ if (_this.options.isVerbose) {
1692
+ console.info(colors.bgRed('error'), error);
1693
+ }
1694
+ throw error;
1695
+ })];
1677
1696
  case 2:
1678
1697
  rawResponse = _a.sent();
1679
1698
  if (this.options.isVerbose) {
@@ -1826,14 +1845,13 @@ var OpenAiAssistantExecutionTools = /** @class */ (function (_super) {
1826
1845
  }
1827
1846
  rawPromptContent = replaceParameters(content, __assign(__assign({}, parameters), { modelName: 'assistant' }));
1828
1847
  rawRequest = {
1829
- // [👨‍👨‍👧‍👧] ...modelSettings,
1830
- assistant_id: 'asst_CJCZzFCbBL0f2D4OWMXVTdBB',
1831
- // <- Note: This is not a private information, just ID of the assistant which is accessible only with correct API key
1848
+ // TODO: [👨‍👨‍👧‍👧] ...modelSettings,
1849
+ // TODO: [👨‍👨‍👧‍👧][🧠] What about system message for assistants, does it make sence - combination of OpenAI assistants with Promptbook Personas
1850
+ assistant_id: this.assistantId,
1832
1851
  thread: {
1833
1852
  messages: [
1834
- // TODO: !!!!!! Unhardcode
1835
1853
  // TODO: !!!!!! Allow threads to be passed
1836
- { role: 'user', content: 'What is the meaning of life? I want breathtaking speech.' },
1854
+ { role: 'user', content: rawPromptContent },
1837
1855
  ],
1838
1856
  },
1839
1857
  // !!!!!! user: this.options.user,
@@ -1842,6 +1860,7 @@ var OpenAiAssistantExecutionTools = /** @class */ (function (_super) {
1842
1860
  if (this.options.isVerbose) {
1843
1861
  console.info(colors.bgWhite('rawRequest'), JSON.stringify(rawRequest, null, 4));
1844
1862
  }
1863
+ console.log('!!!!!! OpenAI client', client);
1845
1864
  return [4 /*yield*/, client.beta.threads.createAndRunStream(rawRequest)];
1846
1865
  case 2:
1847
1866
  stream = _g.sent();
@@ -1974,6 +1993,85 @@ function $getGlobalScope() {
1974
1993
  return Function('return this')();
1975
1994
  }
1976
1995
 
1996
+ /**
1997
+ * @@@
1998
+ *
1999
+ * @param text @@@
2000
+ * @returns @@@
2001
+ * @example 'HELLO_WORLD'
2002
+ * @example 'I_LOVE_PROMPTBOOK'
2003
+ * @public exported from `@promptbook/utils`
2004
+ */
2005
+ function normalizeTo_SCREAMING_CASE(text) {
2006
+ var e_1, _a;
2007
+ var charType;
2008
+ var lastCharType = 'OTHER';
2009
+ var normalizedName = '';
2010
+ try {
2011
+ for (var text_1 = __values(text), text_1_1 = text_1.next(); !text_1_1.done; text_1_1 = text_1.next()) {
2012
+ var char = text_1_1.value;
2013
+ var normalizedChar = void 0;
2014
+ if (/^[a-z]$/.test(char)) {
2015
+ charType = 'LOWERCASE';
2016
+ normalizedChar = char.toUpperCase();
2017
+ }
2018
+ else if (/^[A-Z]$/.test(char)) {
2019
+ charType = 'UPPERCASE';
2020
+ normalizedChar = char;
2021
+ }
2022
+ else if (/^[0-9]$/.test(char)) {
2023
+ charType = 'NUMBER';
2024
+ normalizedChar = char;
2025
+ }
2026
+ else {
2027
+ charType = 'OTHER';
2028
+ normalizedChar = '_';
2029
+ }
2030
+ if (charType !== lastCharType &&
2031
+ !(lastCharType === 'UPPERCASE' && charType === 'LOWERCASE') &&
2032
+ !(lastCharType === 'NUMBER') &&
2033
+ !(charType === 'NUMBER')) {
2034
+ normalizedName += '_';
2035
+ }
2036
+ normalizedName += normalizedChar;
2037
+ lastCharType = charType;
2038
+ }
2039
+ }
2040
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
2041
+ finally {
2042
+ try {
2043
+ if (text_1_1 && !text_1_1.done && (_a = text_1.return)) _a.call(text_1);
2044
+ }
2045
+ finally { if (e_1) throw e_1.error; }
2046
+ }
2047
+ normalizedName = normalizedName.replace(/_+/g, '_');
2048
+ normalizedName = normalizedName.replace(/_?\/_?/g, '/');
2049
+ normalizedName = normalizedName.replace(/^_/, '');
2050
+ normalizedName = normalizedName.replace(/_$/, '');
2051
+ return normalizedName;
2052
+ }
2053
+ /**
2054
+ * TODO: Tests
2055
+ * > expect(encodeRoutePath({ uriId: 'VtG7sR9rRJqwNEdM2', name: 'Moje tabule' })).toEqual('/VtG7sR9rRJqwNEdM2/Moje tabule');
2056
+ * > expect(encodeRoutePath({ uriId: 'VtG7sR9rRJqwNEdM2', name: 'ěščřžžýáíúů' })).toEqual('/VtG7sR9rRJqwNEdM2/escrzyaieuu');
2057
+ * > expect(encodeRoutePath({ uriId: 'VtG7sR9rRJqwNEdM2', name: ' ahoj ' })).toEqual('/VtG7sR9rRJqwNEdM2/ahoj');
2058
+ * > expect(encodeRoutePath({ uriId: 'VtG7sR9rRJqwNEdM2', name: ' ahoj_ahojAhoj ahoj ' })).toEqual('/VtG7sR9rRJqwNEdM2/ahoj-ahoj-ahoj-ahoj');
2059
+ * TODO: [🌺] Use some intermediate util splitWords
2060
+ */
2061
+
2062
+ /**
2063
+ * @@@
2064
+ *
2065
+ * @param text @@@
2066
+ * @returns @@@
2067
+ * @example 'hello_world'
2068
+ * @example 'i_love_promptbook'
2069
+ * @public exported from `@promptbook/utils`
2070
+ */
2071
+ function normalizeTo_snake_case(text) {
2072
+ return normalizeTo_SCREAMING_CASE(text).toLowerCase();
2073
+ }
2074
+
1977
2075
  /**
1978
2076
  * Register is @@@
1979
2077
  *
@@ -1982,9 +2080,9 @@ function $getGlobalScope() {
1982
2080
  * @private internal utility, exported are only signleton instances of this class
1983
2081
  */
1984
2082
  var $Register = /** @class */ (function () {
1985
- function $Register(storageName) {
1986
- this.storageName = storageName;
1987
- storageName = "_promptbook_".concat(storageName);
2083
+ function $Register(registerName) {
2084
+ this.registerName = registerName;
2085
+ var storageName = "_promptbook_".concat(normalizeTo_snake_case(registerName));
1988
2086
  var globalScope = $getGlobalScope();
1989
2087
  if (globalScope[storageName] === undefined) {
1990
2088
  globalScope[storageName] = [];
@@ -1999,7 +2097,6 @@ var $Register = /** @class */ (function () {
1999
2097
  return this.storage;
2000
2098
  };
2001
2099
  $Register.prototype.register = function (registered) {
2002
- // <- TODO: What to return here
2003
2100
  var packageName = registered.packageName, className = registered.className;
2004
2101
  var existingRegistrationIndex = this.storage.findIndex(function (item) { return item.packageName === packageName && item.className === className; });
2005
2102
  var existingRegistration = this.storage[existingRegistrationIndex];
@@ -2009,6 +2106,17 @@ var $Register = /** @class */ (function () {
2009
2106
  else {
2010
2107
  this.storage[existingRegistrationIndex] = registered;
2011
2108
  }
2109
+ return {
2110
+ registerName: this.registerName,
2111
+ packageName: packageName,
2112
+ className: className,
2113
+ get isDestroyed() {
2114
+ return false;
2115
+ },
2116
+ destroy: function () {
2117
+ throw new NotYetImplementedError("Registration to ".concat(this.registerName, " is permanent in this version of Promptbook"));
2118
+ },
2119
+ };
2012
2120
  };
2013
2121
  return $Register;
2014
2122
  }());
@@ -2021,11 +2129,14 @@ var $Register = /** @class */ (function () {
2021
2129
  * @public exported from `@promptbook/core`
2022
2130
  */
2023
2131
  var $llmToolsRegister = new $Register('llm_execution_tools_constructors');
2132
+ /**
2133
+ * TODO: [®] DRY Register logic
2134
+ */
2024
2135
 
2025
2136
  /**
2026
- * @@@ registration2
2137
+ * Registration of LLM provider
2027
2138
  *
2028
- * Note: [🏐] Configurations registrations are done in @@@ BUT constructor @@@
2139
+ * Warning: This is not useful for the end user, it is just a side effect of the mechanism that handles all available LLM tools
2029
2140
  *
2030
2141
  * @public exported from `@promptbook/openai`
2031
2142
  * @public exported from `@promptbook/cli`