@promptbook/markitdown 0.103.0-1 → 0.103.0-100

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 (258) hide show
  1. package/README.md +153 -89
  2. package/esm/index.es.js +239 -168
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/books/index.d.ts +0 -81
  5. package/esm/typings/servers.d.ts +9 -7
  6. package/esm/typings/src/_packages/browser.index.d.ts +6 -0
  7. package/esm/typings/src/_packages/cli.index.d.ts +4 -0
  8. package/esm/typings/src/_packages/components.index.d.ts +20 -8
  9. package/esm/typings/src/_packages/core.index.d.ts +58 -18
  10. package/esm/typings/src/_packages/node.index.d.ts +2 -2
  11. package/esm/typings/src/_packages/remote-server.index.d.ts +2 -0
  12. package/esm/typings/src/_packages/types.index.d.ts +58 -8
  13. package/esm/typings/src/_packages/utils.index.d.ts +6 -0
  14. package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
  15. package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +19 -5
  16. package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +17 -1
  17. package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
  18. package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
  19. package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +3 -3
  20. package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
  21. package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
  22. package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +18 -0
  23. package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
  24. package/esm/typings/src/book-2.0/agent-source/string_book.d.ts +3 -0
  25. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.d.ts +10 -0
  26. package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfileTooltip.d.ts +15 -0
  27. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +83 -8
  28. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
  29. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  30. package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +14 -0
  31. package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
  32. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +10 -0
  33. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
  34. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  35. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  36. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
  37. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
  38. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
  39. package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +5 -0
  40. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +29 -0
  41. package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
  42. package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
  43. package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
  44. package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
  45. package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
  46. package/esm/typings/src/book-components/_common/HamburgerMenu/HamburgerMenu.d.ts +12 -0
  47. package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +13 -0
  48. package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
  49. package/esm/typings/src/book-components/_common/react-utils/classNames.d.ts +1 -1
  50. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  51. package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
  52. package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
  53. package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
  54. package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
  55. package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
  56. package/esm/typings/src/book-components/icons/MicIcon.d.ts +8 -0
  57. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  58. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  59. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  60. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  61. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  62. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  63. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  64. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  65. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  66. package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
  67. package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
  68. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  69. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  70. package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
  71. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
  72. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
  73. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
  74. package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
  75. package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
  76. package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
  77. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
  78. package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
  79. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
  80. package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
  81. package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
  82. package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
  83. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  84. package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
  85. package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +35 -0
  86. package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
  87. package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
  88. package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
  89. package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
  90. package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
  91. package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
  92. package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
  93. package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
  94. package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
  95. package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
  96. package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
  97. package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
  98. package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
  99. package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
  100. package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
  101. package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
  102. package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
  103. package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
  104. package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
  105. package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
  106. package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
  107. package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
  108. package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
  109. package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
  110. package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
  111. package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
  112. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +38 -0
  113. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
  114. package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
  115. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
  116. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +8 -2
  117. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
  118. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
  119. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
  120. package/esm/typings/src/commitments/index.d.ts +93 -0
  121. package/esm/typings/src/config.d.ts +24 -3
  122. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
  123. package/esm/typings/src/errors/0-index.d.ts +6 -0
  124. package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
  125. package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
  126. package/esm/typings/src/errors/WrappedError.d.ts +2 -2
  127. package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
  128. package/esm/typings/src/execution/Executables.d.ts +3 -0
  129. package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
  130. package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
  131. package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
  132. package/esm/typings/src/execution/LlmExecutionTools.d.ts +21 -1
  133. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
  134. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
  135. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
  136. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
  137. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  138. package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
  139. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  140. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
  141. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  142. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
  143. package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
  144. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
  145. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
  146. package/esm/typings/src/llm-providers/agent/Agent.d.ts +70 -0
  147. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
  148. package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
  149. package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
  150. package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
  151. package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
  152. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
  153. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  154. package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
  155. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
  156. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
  157. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  158. package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
  159. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  160. package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
  161. package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
  162. package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
  163. package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
  164. package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
  165. package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
  166. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
  167. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  168. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  169. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  170. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  171. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  172. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  173. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  174. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  175. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  176. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  177. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  178. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  179. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  180. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  181. package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
  182. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  183. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
  184. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
  185. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  186. package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
  187. package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
  188. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
  189. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
  190. package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
  191. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
  192. package/esm/typings/src/types/LlmCall.d.ts +20 -0
  193. package/esm/typings/src/types/Updatable.d.ts +19 -0
  194. package/esm/typings/src/types/typeAliases.d.ts +32 -2
  195. package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
  196. package/esm/typings/src/utils/color/Color.d.ts +15 -0
  197. package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
  198. package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
  199. package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
  200. package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
  201. package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
  202. package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
  203. package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
  204. package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
  205. package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
  206. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
  207. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  208. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  209. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  210. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  211. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  212. package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
  213. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
  214. package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
  215. package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
  216. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  217. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  218. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
  219. package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
  220. package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
  221. package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
  222. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
  223. package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
  224. package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
  225. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  226. package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
  227. package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
  228. package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
  229. package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
  230. package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +25 -0
  231. package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
  232. package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
  233. package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
  234. package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
  235. package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
  236. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  237. package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
  238. package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
  239. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
  240. package/esm/typings/src/version.d.ts +1 -1
  241. package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
  242. package/package.json +7 -7
  243. package/umd/index.umd.js +264 -193
  244. package/umd/index.umd.js.map +1 -1
  245. package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
  246. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  247. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  248. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  249. package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
  250. package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
  251. /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
  252. /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
  253. /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
  254. /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
  255. /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
  256. /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
  257. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
  258. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
package/umd/index.umd.js CHANGED
@@ -1,12 +1,12 @@
1
1
  (function (global, factory) {
2
2
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('fs/promises'), require('spacetrim'), require('crypto-js'), require('crypto-js/enc-hex'), require('path'), require('crypto'), require('rxjs'), require('waitasecond'), require('crypto-js/sha256'), require('mime-types'), require('papaparse')) :
3
3
  typeof define === 'function' && define.amd ? define(['exports', 'fs/promises', 'spacetrim', 'crypto-js', 'crypto-js/enc-hex', 'path', 'crypto', 'rxjs', 'waitasecond', 'crypto-js/sha256', 'mime-types', 'papaparse'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-markitdown"] = {}, global.promises, global.spaceTrim, global.cryptoJs, global.hexEncoder, global.path, global.crypto, global.rxjs, global.waitasecond, global.sha256, global.mimeTypes, global.papaparse));
5
- })(this, (function (exports, promises, spaceTrim, cryptoJs, hexEncoder, path, crypto, rxjs, waitasecond, sha256, mimeTypes, papaparse) { 'use strict';
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["promptbook-markitdown"] = {}, global.promises, global.spaceTrim$1, global.cryptoJs, global.hexEncoder, global.path, global.crypto, global.rxjs, global.waitasecond, global.sha256, global.mimeTypes, global.papaparse));
5
+ })(this, (function (exports, promises, spaceTrim$1, cryptoJs, hexEncoder, path, crypto, rxjs, waitasecond, sha256, mimeTypes, papaparse) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
9
- var spaceTrim__default = /*#__PURE__*/_interopDefaultLegacy(spaceTrim);
9
+ var spaceTrim__default = /*#__PURE__*/_interopDefaultLegacy(spaceTrim$1);
10
10
  var hexEncoder__default = /*#__PURE__*/_interopDefaultLegacy(hexEncoder);
11
11
  var sha256__default = /*#__PURE__*/_interopDefaultLegacy(sha256);
12
12
 
@@ -17,14 +17,14 @@
17
17
  * @generated
18
18
  * @see https://github.com/webgptorg/book
19
19
  */
20
- const BOOK_LANGUAGE_VERSION = '1.0.0';
20
+ const BOOK_LANGUAGE_VERSION = '2.0.0';
21
21
  /**
22
22
  * The version of the Promptbook engine
23
23
  *
24
24
  * @generated
25
25
  * @see https://github.com/webgptorg/promptbook
26
26
  */
27
- const PROMPTBOOK_ENGINE_VERSION = '0.103.0-1';
27
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-100';
28
28
  /**
29
29
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
30
30
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -47,6 +47,17 @@
47
47
  function keepUnused(...valuesToKeep) {
48
48
  }
49
49
 
50
+ /**
51
+ * Trims string from all 4 sides
52
+ *
53
+ * Note: This is a re-exported function from the `spacetrim` package which is
54
+ * Developed by same author @hejny as this package
55
+ *
56
+ * @public exported from `@promptbook/utils`
57
+ * @see https://github.com/hejny/spacetrim#usage
58
+ */
59
+ const spaceTrim = spaceTrim$1.spaceTrim;
60
+
50
61
  /**
51
62
  * @private util of `@promptbook/color`
52
63
  * @de
@@ -95,6 +106,7 @@
95
106
  * @public exported from `@promptbook/color`
96
107
  */
97
108
  const CSS_COLORS = {
109
+ promptbook: '#79EAFD',
98
110
  transparent: 'rgba(0,0,0,0)',
99
111
  aliceblue: '#f0f8ff',
100
112
  antiquewhite: '#faebd7',
@@ -276,9 +288,6 @@
276
288
  throw new Error(`${channelName} channel is greater than 255, it is ${value}`);
277
289
  }
278
290
  }
279
- /**
280
- * TODO: [🧠][🚓] Is/which combination it better to use asserts/check, validate or is utility function?
281
- */
282
291
 
283
292
  /**
284
293
  * Color object represents an RGB color with alpha channel
@@ -313,6 +322,28 @@
313
322
  throw new Error(`Can not create color from given object`);
314
323
  }
315
324
  }
325
+ /**
326
+ * Creates a new Color instance from miscellaneous formats
327
+ * It just does not throw error when it fails, it returns PROMPTBOOK_COLOR instead
328
+ *
329
+ * @param color
330
+ * @returns Color object
331
+ */
332
+ static fromSafe(color) {
333
+ try {
334
+ return Color.from(color);
335
+ }
336
+ catch (error) {
337
+ // <- Note: Can not use `assertsError(error)` here because it causes circular dependency
338
+ console.warn(spaceTrim((block) => `
339
+ Color.fromSafe error:
340
+ ${block(error.message)}
341
+
342
+ Returning default PROMPTBOOK_COLOR.
343
+ `));
344
+ return Color.fromString('promptbook');
345
+ }
346
+ }
316
347
  /**
317
348
  * Creates a new Color instance from miscellaneous string formats
318
349
  *
@@ -380,6 +411,9 @@
380
411
  if (hex.length === 3) {
381
412
  return Color.fromHex3(hex);
382
413
  }
414
+ if (hex.length === 4) {
415
+ return Color.fromHex4(hex);
416
+ }
383
417
  if (hex.length === 6) {
384
418
  return Color.fromHex6(hex);
385
419
  }
@@ -400,6 +434,19 @@
400
434
  const b = parseInt(hex.substr(2, 1), 16) * 16;
401
435
  return take(new Color(r, g, b));
402
436
  }
437
+ /**
438
+ * Creates a new Color instance from color in hex format with 4 digits (with alpha channel)
439
+ *
440
+ * @param color in hex for example `09df`
441
+ * @returns Color object
442
+ */
443
+ static fromHex4(hex) {
444
+ const r = parseInt(hex.substr(0, 1), 16) * 16;
445
+ const g = parseInt(hex.substr(1, 1), 16) * 16;
446
+ const b = parseInt(hex.substr(2, 1), 16) * 16;
447
+ const a = parseInt(hex.substr(3, 1), 16) * 16;
448
+ return take(new Color(r, g, b, a));
449
+ }
403
450
  /**
404
451
  * Creates a new Color instance from color in hex format with 6 color digits (without alpha channel)
405
452
  *
@@ -590,7 +637,8 @@
590
637
  * @returns true if the value is a valid hex color string (e.g., `#009edd`, `#fff`, etc.)
591
638
  */
592
639
  static isHexColorString(value) {
593
- return typeof value === 'string' && /^#(?:[0-9a-fA-F]{3}){1,2}$/.test(value);
640
+ return (typeof value === 'string' &&
641
+ /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value));
594
642
  }
595
643
  /**
596
644
  * Creates new Color object
@@ -705,6 +753,23 @@
705
753
  * TODO: Maybe connect with textures
706
754
  */
707
755
 
756
+ /**
757
+ * Makes color transformer which returns a grayscale version of the color
758
+ *
759
+ * @param amount from 0 to 1
760
+ *
761
+ * @public exported from `@promptbook/color`
762
+ */
763
+ function grayscale(amount) {
764
+ return ({ red, green, blue, alpha }) => {
765
+ const average = (red + green + blue) / 3;
766
+ red = Math.round(average * amount + red * (1 - amount));
767
+ green = Math.round(average * amount + green * (1 - amount));
768
+ blue = Math.round(average * amount + blue * (1 - amount));
769
+ return Color.fromValues(red, green, blue, alpha);
770
+ };
771
+ }
772
+
708
773
  /**
709
774
  * Converts HSL values to RGB values
710
775
  *
@@ -820,102 +885,6 @@
820
885
  * TODO: Maybe implement by mix+hsl
821
886
  */
822
887
 
823
- /**
824
- * Calculates distance between two colors
825
- *
826
- * @param color1 first color
827
- * @param color2 second color
828
- *
829
- * Note: This function is inefficient. Use colorDistanceSquared instead if possible.
830
- *
831
- * @public exported from `@promptbook/color`
832
- */
833
- /**
834
- * Calculates distance between two colors without square root
835
- *
836
- * @param color1 first color
837
- * @param color2 second color
838
- *
839
- * @public exported from `@promptbook/color`
840
- */
841
- function colorDistanceSquared(color1, color2) {
842
- const rmean = (color1.red + color2.red) / 2;
843
- const r = color1.red - color2.red;
844
- const g = color1.green - color2.green;
845
- const b = color1.blue - color2.blue;
846
- const weightR = 2 + rmean / 256;
847
- const weightG = 4.0;
848
- const weightB = 2 + (255 - rmean) / 256;
849
- const distance = weightR * r * r + weightG * g * g + weightB * b * b;
850
- return distance;
851
- }
852
-
853
- /**
854
- * Makes color transformer which finds the nearest color from the given list
855
- *
856
- * @param colors array of colors to choose from
857
- *
858
- * @public exported from `@promptbook/color`
859
- */
860
- function nearest(...colors) {
861
- return (color) => {
862
- const distances = colors.map((c) => colorDistanceSquared(c, color));
863
- const minDistance = Math.min(...distances);
864
- const minIndex = distances.indexOf(minDistance);
865
- const nearestColor = colors[minIndex];
866
- return nearestColor;
867
- };
868
- }
869
-
870
- /**
871
- * Color transformer which returns the negative color
872
- *
873
- * @public exported from `@promptbook/color`
874
- */
875
- function negative(color) {
876
- const r = 255 - color.red;
877
- const g = 255 - color.green;
878
- const b = 255 - color.blue;
879
- return Color.fromValues(r, g, b, color.alpha);
880
- }
881
-
882
- /**
883
- * Makes color transformer which finds the furthest color from the given list
884
- *
885
- * @param colors array of colors to choose from
886
- *
887
- * @public exported from `@promptbook/color`
888
- */
889
- function furthest(...colors) {
890
- return (color) => {
891
- const furthestColor = negative(nearest(...colors.map(negative))(color));
892
- return furthestColor;
893
- };
894
- }
895
- /**
896
- * Makes color transformer which finds the best text color (black or white) for the given background color
897
- *
898
- * @public exported from `@promptbook/color`
899
- */
900
- furthest(Color.get('white'), Color.from('black'));
901
-
902
- /**
903
- * Makes color transformer which returns a grayscale version of the color
904
- *
905
- * @param amount from 0 to 1
906
- *
907
- * @public exported from `@promptbook/color`
908
- */
909
- function grayscale(amount) {
910
- return ({ red, green, blue, alpha }) => {
911
- const average = (red + green + blue) / 3;
912
- red = Math.round(average * amount + red * (1 - amount));
913
- green = Math.round(average * amount + green * (1 - amount));
914
- blue = Math.round(average * amount + blue * (1 - amount));
915
- return Color.fromValues(red, green, blue, alpha);
916
- };
917
- }
918
-
919
888
  /**
920
889
  * Makes color transformer which saturate the given color
921
890
  *
@@ -984,16 +953,32 @@
984
953
  *
985
954
  * @public exported from `@promptbook/core`
986
955
  */
987
- const PROMPTBOOK_COLOR = Color.fromHex('#79EAFD');
988
- // <- TODO: [🧠] Using `Color` here increases the package size approx 3kb, maybe remove it
956
+ const PROMPTBOOK_COLOR = Color.fromString('promptbook');
957
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
958
+ /**
959
+ * Colors for syntax highlighting in the `<BookEditor/>`
960
+ *
961
+ * TODO: [🗽] Unite branding and make single place for it
962
+ *
963
+ * @public exported from `@promptbook/core`
964
+ */
965
+ ({
966
+ TITLE: Color.fromHex('#244EA8'),
967
+ LINE: Color.fromHex('#eeeeee'),
968
+ SEPARATOR: Color.fromHex('#cccccc'),
969
+ COMMITMENT: Color.fromHex('#DA0F78'),
970
+ PARAMETER: Color.fromHex('#8e44ad'),
971
+ });
972
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
989
973
  /**
990
- * Dark color of the Promptbook
974
+ * Chat color of the Promptbook (in chat)
991
975
  *
992
976
  * TODO: [🗽] Unite branding and make single place for it
993
977
  *
994
978
  * @public exported from `@promptbook/core`
995
979
  */
996
980
  PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
981
+ // <- TODO: [🧠][🈵] Using `Color` and `lighten`, `saturate`,... here increases the package size approx 3kb, maybe remove it
997
982
  /**
998
983
  * Color of the user (in chat)
999
984
  *
@@ -1002,6 +987,7 @@
1002
987
  * @public exported from `@promptbook/core`
1003
988
  */
1004
989
  Color.fromHex('#1D4ED8');
990
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1005
991
  /**
1006
992
  * When the title is not provided, the default title is used
1007
993
  *
@@ -1088,7 +1074,7 @@
1088
1074
  * @public exported from `@promptbook/core`
1089
1075
  */
1090
1076
  const DEFAULT_MAX_EXECUTION_ATTEMPTS = 7; // <- TODO: [🤹‍♂️]
1091
- // <- TODO: [🕝] Make also `BOOKS_DIRNAME_ALTERNATIVES`
1077
+ // <- TODO: [🕝] Make also `AGENTS_DIRNAME_ALTERNATIVES`
1092
1078
  // TODO: Just `.promptbook` in config, hardcode subfolders like `download-cache` or `execution-cache`
1093
1079
  /**
1094
1080
  * Where to store the temporary downloads
@@ -1234,7 +1220,7 @@
1234
1220
  */
1235
1221
  class UnexpectedError extends Error {
1236
1222
  constructor(message) {
1237
- super(spaceTrim.spaceTrim((block) => `
1223
+ super(spaceTrim$1.spaceTrim((block) => `
1238
1224
  ${block(message)}
1239
1225
 
1240
1226
  Note: This error should not happen.
@@ -1570,6 +1556,8 @@
1570
1556
  /**
1571
1557
  * Converts a given text to kebab-case format.
1572
1558
  *
1559
+ * Note: [🔂] This function is idempotent.
1560
+ *
1573
1561
  * @param text The text to be converted.
1574
1562
  * @returns The kebab-case formatted string.
1575
1563
  * @example 'hello-world'
@@ -1725,6 +1713,8 @@
1725
1713
  /**
1726
1714
  * Converts a title string into a normalized name.
1727
1715
  *
1716
+ * Note: [🔂] This function is idempotent.
1717
+ *
1728
1718
  * @param value The title string to be converted to a name.
1729
1719
  * @returns A normalized name derived from the input title.
1730
1720
  * @example 'Hello World!' -> 'hello-world'
@@ -1816,7 +1806,7 @@
1816
1806
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
1817
1807
  */
1818
1808
 
1819
- var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModels",description:"List of available model names together with their descriptions as JSON",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelsRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n```json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n```\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n```json\n{availableModels}\n```\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelsRequirements",format:"JSON",dependentParameterNames:["availableModels","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModels}` List of available model names together with their descriptions as JSON\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelsRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n\\`\\`\\`json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n\\`\\`\\`json\n{availableModels}\n\\`\\`\\`\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelsRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"},{title:"📊 Curriculum Audit",pipelineUrl:"https://promptbook.studio/promptbook//examples/lsvp-asistent.book",formfactorName:"GENERIC",parameters:[{name:"result",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"prompt",title:"Prompt",content:"Asistent pro LŠVP\n\nPERSONA Jsi asistent pro RVP Lyceum v rámci Národního pedagogického institutu České Republiky\nMETA IMAGE https://edulk.cz/getFile/id:475818/type:large/02%20zna%C4%8Dka%20npi.jpg\nRULE Pokud jsi nejsi jistý, napiš nevím\nKNOWLEDGE ./241129_Lyceum_final.pdf\nCONTEXT Obecně dokážeš řešit libovolné ŠVP, aktuálně řešíš {Školní vzdělávací program LYCEUM}\nRULE Z {Porovnání RVP a ŠVP - postup} je nejdůležitější fáze 3\nKNOWLEDGE {Školní vzdělávací program LYCEUM} ./ŠVP Lyceum - Finance v digitální době.pdf\nKNOWLEDGE @Slovník\n\n**Interní slovník - RVP/ŠVP**\n\n**RVP**\n\nRámcový vzdělávací program pro obor vzdělání Lyceum je dokument na národní úrovni, který formuluje požadavky na školní vzdělávací programy ve formě především očekávaných výsledků učení, kterých mají žáci absolvováním tohoto programu na dané škole dosáhnout.\n\n**ŠVP**\n\nŠkolní vzdělávací program pro obor vzdělání Lyceum je dokument každé jednotlivé školy, který popisuje v jakých vyučovacích předmětech/ vzdělávacích modulech a v jakých ročnících budou požadované očekávané výsledky učení naplněny. Zároveň formuluje další očekávané výsledky učení, které naplňují disponibilní část vyučovacího času určeného RVP pro tento obor vzdělání.\n\n**Očekávaný výsledek učení (OVU)**\n\nVyjadřuje jednotlivý požadavek na to, co mají žáci umět na konci vzdělávacího programu, tzn. jejich požadované kompetence. Je vyjádřen formulací, která je uvozena činnostním slovesem a dále obsahuje předmět této činnosti. Formulace je konkretizována resp. doplněna zpravidla formou odrážek vymezením dílčích znalostí, dovedností, postojů, jejichž splnění je předpokladem dosažení OVU jako celku.\n\n_Příklad:_\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th><p><strong>Žák/žákyně řídí realizaci jednoduchého projektu</strong></p></th></tr><tr><td><ul><li>naplánuje aktivity projektu</li></ul></td></tr><tr><td><ul><li>navrhne rozpočet projektu vzhledem k navrženým aktivitám</li></ul></td></tr><tr><td><ul><li>stanoví základní ukazatele a sleduje jejich naplňování</li></ul></td></tr><tr><td><ul><li>vede projektový tým</li></ul></td></tr><tr><td><ul><li>uvede, jak by řešil krizové situace v projektu</li></ul></td></tr><tr><td><ul><li>vyhodnotí úspěšnost projektu</li></ul></td></tr></tbody></table></div>\n\n**Vzdělávací oblasti**\n\nOčekávané výsledky učení jsou v **_RVP členěny do 4 vzdělávacích oblastí_**, které tvoří společný všeobecně vzdělávací základ:\n\n- Osobnostní rozvoj, vzdělávání ke zdraví, bezpečí a produktivnímu pracovnímu životu (kariéře)\n- Komunikační a jazykové vzdělávání\n- Aplikované vzdělávání STEM (Science, Technology, Engeneering, Math), tj. přírodní vědy, informatika, technika, matematika\n- Prakticky orientované vzdělávání společenskovědní a humanitní\n\nKaždá vzdělávací oblast se dále člení na okruhy, v jejichž rámci jsou OVU samostatně číslované.\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th rowspan=\"21\"><ul><li>Prakticky orientované vzdělávání společenskovědní a humanitní</li></ul></th><th rowspan=\"21\"><p><strong>Člověk, ekonomie a podnikání</strong></p></th><th rowspan=\"7\"><p><strong>1</strong></p></th><th><p><strong>zpracuje podklady související s podnikáním</strong></p></th></tr><tr><td><p>připraví podnikatelský záměr</p></td></tr><tr><td><p>sestaví zakladatelský rozpočet</p></td></tr><tr><td><p>zkalkuluje cenu zboží nebo služby</p></td></tr><tr><td><p>vysvětlí na příkladu základní povinnosti podnikatele vůči státu a zaměstnancům</p></td></tr><tr><td><p>vede daňovou evidenci</p></td></tr><tr><td><p>vysvětlí na příkladech etiku v podnikání</p></td></tr><tr><td rowspan=\"7\"><p><strong>2</strong></p></td><td><p><strong>řídí realizaci jednoduchého projektu</strong></p></td></tr><tr><td><p>naplánuje aktivity projektu</p></td></tr><tr><td><p>navrhne rozpočet projektu vzhledem k navrženým aktivitám</p></td></tr><tr><td><p>stanoví základní ukazatele a sleduje jejich naplňování</p></td></tr><tr><td><p>vede projektový tým</p></td></tr><tr><td><p>uvede, jak by řešil krizové situace v projektu</p></td></tr><tr><td><p>vyhodnotí úspěšnost projektu</p></td></tr><tr><td rowspan=\"7\"><p><strong>3</strong></p></td><td><p><strong>aplikuje ekonomické teorie v osobním a profesním životě</strong></p></td></tr><tr><td><p>vysvětlí základní ekonomické otázky</p></td></tr><tr><td><p>vysvětí stanovení rovnovážné ceny na dokonalém i nedokonalém trhu</p></td></tr><tr><td><p>charakterizuje výrobní faktory a vysvětlí hranici produkčních možností a náklady obětované příležitosti</p></td></tr><tr><td><p>uvede nejdůležitější makroekonomické pojmy a vliv jejich výše na kvalitu života a podnikání v daném státě</p></td></tr><tr><td><p>vysvětlí podstatu inflace a její důsledky na finanční situaci obyvatel a na příkladu ukáže jak se bránit jejím nepříznivým důsledkům</p></td></tr><tr><td><p>uvede hlavní výhody a nevýhody mezinárodního obchodu a vliv ochranářských opatření na ekonomickou situaci dané země</p></td></tr><tr><td></td><td></td><td><p><strong>4</strong></p></td><td><p>Atd.</p></td></tr></tbody></table></div>\n\n**Vyučovací předmět / vzdělávací modul**\n\nOčekávané výsledky učení jsou v **ŠVP** členěny do vyučovacích předmětů nebo vzdělávacích modulů, které jsou dále zařazeny do jednoho nebo více ročníků 4letého studia. Vyučovací předmět / vzdělávací modul tvoří vyučovací jednotku, kde jsou očekávané výsledky učení dále rozpracovány pro potřeby výuky podle následující šablony\n\n| **A. VSTUPNÍ ČÁST** |\n| --- |\n| **1\\. Název** |\n| **2\\. Kód** (kódy by měly být navázány na obory vzdělání a výsledky učení) |\n| **2a) Kategorie vzdělání** - v případě, že nebude součástí kódu |\n| **3\\. Typ vyučovací jednotky** (modul, předmět, stáž apod.) |\n| **4\\. Délka** (počet hodin - dělitelný čtyřmi (optimální modul 16, 32 hodin = týden výuky) |\n| **5\\. Platnost** (datum, od kterého platí) |\n| **6\\. Vstupní předpoklady** (vymezení požadované úrovně vstupních vědomostí a dovedností, které jsou předpokladem úspěšného studia) |\n| |\n| **B. JÁDRO VYUČOVACÍ JEDNOTKY** |\n| **1\\. Charakteristika** (stručná anotace popisující obecné cíle a pojetí) |\n| **2\\. Očekávané výsledky učení a jejich indikátory (převzaté z RVP nebo dále konkretizované)** |\n| **3\\. Podpora rozvoje klíčových kompetencí a základních gramotností** (které klíčové kompetence jsou v rozvíjeny) |\n| **4\\. Obsah vzdělávání** (rozpis učiva) |\n| **5\\. Vzdělávací strategie** (strategie výuky, resp. učební činnosti žáků, které jsou doporučené pro dosažení výsledků) |\n| |\n| **C. VÝSTUPNÍ ČÁST** |\n| **1\\. Způsob ověřování dosažených výsledků** (ve vazbě na jednotlivé výsledky učení) |\n| **2\\. Kritéria hodnocení** (co znamená splnění výsledků učení, kdy je splněna celá vyučovací jednotka, kritéria pro známky, příp. procentuální, slovní hodnocení) |\n| **3\\. Doporučená studijní literatura, odkazy na ilustrační zdroje** |\n| **4\\. Poznámky** |\n\n**Soulad OVU RVP a ŠVP**\n\nTento soulad je předmětem zjišťování. Soulad nastává, jestliže jsou očekávané výsledky učení z jednotlivých vzdělávacích oblastí RVP **obsaženy** ve vyučovacích předmětech/ vzdělávacích modulech ŠVP jednotlivých škol, tzn. že v ŠVP se objevuje jejich formulace buď v doslovném nebo podobném znění v jednom nebo více vyučovacích předmětech/ vzdělávacích modulech.\n\n_Příklad souladu:_\n\nRVP ŠVP - komunikace a marketing (SŠ obchodní Č.\n\n| **2** | **řídí realizaci jednoduchého projektu** |\n| --- | --- |\n| naplánuje aktivity projektu |\n| navrhne rozpočet projektu vzhledem k navrženým aktivitám |\n| stanoví základní ukazatele a sleduje jejich naplňování |\n| vede projektový tým |\n| uvede, jak by řešil krizové situace v projektu |\n| vyhodnotí úspěšnost projektu |\n\nKNOWLEDGE {Porovnání RVP a ŠVP - postup}\n\n\n# AUDITNÍ PROTOKOL ŠVP-RVP\n\n# (POPIS KONTROLNÍHO ALGORITMU)\n\nMetodika je určena pro **Kvantifikaci Shody** školního vzdělávacího programu (ŠVP) s Rámcovým vzdělávacím programem (RVP).\n\n## FÁZE 1: VALIDACE DOKUMENTACE\n\n**Cíl:** Ověřit platnost, aktuálnost a strukturu zdrojových dokumentů.\n\n- **RVP Verifikace:** Otevřít aktuální verzi RVP (např. RVP ZV/G/SOŠ).\n- **Typová shoda:** Ověřit, že RVP se vztahuje k danému typu školy.\n- **ŠVP Dimenze:** Identifikovat a izolovat relevantní části ŠVP: Profil absolventa, Klíčové kompetence (KK), Vzdělávací oblasti (VO), případně Učební plán (UP).\n- **Verzování:** Potvrdit, že obě verze (RVP a ŠVP) jsou nejnovější a platné (včetně dodatků RVP).\n\n## FÁZE 2: DATABÁZOVÉ MAPOVÁNÍ VÝSTUPŮ (MASTER MATICE)\n\n**Cíl:** Vytvořit systémovou databázi pro křížové porovnání všech povinných komponent RVP se ŠVP.\n\n- **Dekompozice RVP:** Rozložit RVP na základní povinné komponenty: Klíčové kompetence, Vzdělávací oblasti a obory, Očekávané výstupy (OVU), Průřezová témata (PT).\n- **Přiřazovací mapa:** Vytvořit hlavní kontrolní matici (Master Matice) pro záznam vazeb.\n\n| Oblast RVP | Výstup RVP (OVU) | Odpovídající Část ŠVP (Předmět/Ročník) | Konkrétní Tématický Celek v ŠVP | Stav Shody (Protokol) |\n| --- | --- | --- | --- | --- |\n| ... | ... | ... | ... | ... |\n| --- | --- | --- | --- | --- |\n\n## FÁZE 3: ALGORITMICKÁ KONTROLA POKRYTÍ A HLOUBKY\n\n**Cíl:** Posoudit, zda každý povinný výstup RVP je adekvátně reflektován v obsahu ŠVP, a přidělit bodovou hodnotu pro kvantifikaci.\n\n- **Audit OVU:** Projít každý jednotlivý Očekávaný výstup (OVU) z RVP.\n- **Kódování stavu a bodování:** U každého OVU v matici označit stav pokrytí dle následujícího schématu:\n\n| Kód (Protokol) | Popis (Kvalitativní zjištění) | Bodová hodnota (Kvantifikace) |\n| --- | --- | --- |\n| ✅ | Plná shoda (Výstup pokryt v plném rozsahu, odpovídající úrovni RVP) | 1,0 |\n| --- | --- | --- |\n| ⚠️ | Částečná shoda (Formální pokrytí, omezený rozsah, chybná návaznost) | 0,5 |\n| --- | --- | --- |\n| ❌ | Absence (Výstup zcela chybí v obsahu ŠVP) | 0,0 |\n| --- | --- | --- |\n\n- **Defektologie ŠVP:** Identifikovat a zaznamenat deficity ŠVP: Chybějící výstupy (❌), Sémantické překryvy, Přetížení obsahu.\n- **Kvalitativní posun:** Ověřit, zda je formulace výstupů v ŠVP **aktivní, měřitelná a v souladu** s úrovní RVP.\n\n## FÁZE 4: STRUKTURÁLNÍ VERIFIKACE NÁVAZNOSTI (VERTIKÁLA/HORIZONTÁLA)\n\n**Cíl:** Zkontrolovat logickou posloupnost a provázanost učiva v rámci ŠVP.\n\n- **Vertikální Kontrola:** Ověřit posloupnost OVU a učiva uvnitř jednoho předmětu/oblasti (postup od jednodušších ke složitějším konceptům napříč ročníky).\n- **Horizontální Kontrola:** Zkontrolovat logické provázání napříč vzdělávacími oblastmi a předměty (např. fyzika ↔ matematika).\n- **PT Integrace:** Audit reálné integrace Průřezových témat (PT) do konkrétních částí obsahu, metod a projektů.\n\n## FÁZE 5: ANALÝZA ŠKOLNÍ PROFILACE A ROZŠÍŘENÍ RVP\n\n**Cíl:** Validovat, že profilace školy je **v souladu** s RVP a nejedná se o **rozpor**.\n\n- **Nekonfliktnost:** Porovnat definovaný Profil absolventa školy s Klíčovými kompetencemi RVP. Profil ŠVP musí RVP rozvíjet, nikoli mu odporovat.\n- **Modularita:** Zkontrolovat, zda volitelné předměty a rozšiřující moduly logicky navazují na vzdělávací oblasti RVP.\n- **Implementace specializace:** Popisně uvést, jak je školní profilace (např. STEM zaměření, projektová výuka) integrována do OVU a kompetencí definovaných RVP.\n\n## FÁZE 6: GENERÁTOR ZÁVĚREČNÉ ZPRÁVY A KVANTIFIKACE\n\n**Cíl:** Syntetizovat výsledky, kvantifikovat soulad a generovat závazné návrhy na korekce.\n\n### 6.1 Kvantifikace Souladu\n\nVypočítat Index shody (IS) na základě bodového hodnocení (Fáze 3):\n\n### 6.2 Interpretace Indexu Shody (IS)\n\nKlasifikace souladu pro standardizované vyhodnocení:\n\n| Interval IS | Klasifikace souladu | Popis |\n| --- | --- | --- |\n| 95-100 % | Výborný soulad | ŠVP plně odpovídá RVP, pouze stylistické nebo formální rozdíly. |\n| --- | --- | --- |\n| 85-94 % | Dobrá shoda | ŠVP pokrývá všechny klíčové výstupy, menší korekce nutné. |\n| --- | --- | --- |\n| 70-84 % | Částečná shoda | Významné nedostatky v některých oblastech, nutná revize obsahu. |\n| --- | --- | --- |\n| < 70 % | Kritická neshoda | ŠVP neplní rámcové požadavky, ohrožuje legislativní soulad. |\n| --- | --- | --- |\n\n### 6.3 Doplňkové Indexy\n\nVypočítat následující doplňkové indexy pro detailní kvalitativní analýzu:\n\n- **Index kompetenčního souladu (IKS):** Poměr pokrytí klíčových kompetencí RVP v ŠVP.\n- **Index průřezové integrace (IPI):** Míra reálné integrace průřezových témat do výuky.\n- **Index hloubky pokrytí (IHP):** Procento výstupů, které jsou v ŠVP rozvedeny na konkrétní výukové cíle (měřitelné, aktivní formulace).\n- **Index profilové rozšiřitelnosti (IPR):** Kolik rozšiřujících nebo profilových výstupů přesahuje rámec RVP, aniž by narušily jeho strukturu.\n\n### 6.4 Vizuální výstupy\n\nZajistit generování následujících vizualizací pro Závěrečnou zprávu:\n\n- Graf pokrytí po vzdělávacích oblastech (Sloupcový graf IS pro VO).\n- Pavoukový diagram Klíčových kompetencí (RVP vs. ŠVP).\n- Mapa defektů (Vizualizace ❌ a ⚠️ výstupů).\n\n### 6.5 Struktura Závěrečné Zprávy\n\nZpráva musí být strukturována dle standardizovaného formátu:\n\n| Oddíl | Obsah |\n| --- | --- |\n| A. Identifikace | Název školy, IZO, typ školy, datum revize, zpracovatel, verze ŠVP a RVP. |\n| --- | --- |\n| B. Shrnutí výsledků | Celkový Index Shody (IS), hlavní závěry a doporučení. |\n| --- | --- |\n| C. Kvantitativní analýza | Přehled IS v % dle kategorií OVU / VO / kompetencí. |\n| --- | --- |\n| D. Kvalitativní analýza | Slovní zhodnocení kvality souladu (formulace, obtížnost, integrace PT). |\n| --- | --- |\n| E. Rizikové oblasti | Přehled nalezených defektů (chybějící OVU, přetížení, formální shoda). |\n| --- | --- |\n| F. Návrhy opatření (Korekční plán) | Přesné návrhy změn - **Co, Kde, Kdo** má upravit, včetně termínu. |\n| --- | --- |\n| G. Přílohy | Master Matice (Fáze 2-3), revizní tabulka, výstupní grafy a metriky. |\n| --- | --- |\n\n\n\n\n.",resultingParameterName:"result",dependentParameterNames:[]}],personas:[],preparations:[{id:1,promptbookVersion:"0.103.0-0",usage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"Asistent pro LŠVP\n\nPERSONA Jsi asistent pro RVP Lyceum v rámci Národního pedagogického institutu České Republiky\nMETA IMAGE https://edulk.cz/getFile/id:475818/type:large/02%20zna%C4%8Dka%20npi.jpg\nRULE Pokud jsi nejsi jistý, napiš nevím\nKNOWLEDGE ./241129_Lyceum_final.pdf\nCONTEXT Obecně dokážeš řešit libovolné ŠVP, aktuálně řešíš {Školní vzdělávací program LYCEUM}\nRULE Z {Porovnání RVP a ŠVP - postup} je nejdůležitější fáze 3\nKNOWLEDGE {Školní vzdělávací program LYCEUM} ./ŠVP Lyceum - Finance v digitální době.pdf\nKNOWLEDGE @Slovník\n\n**Interní slovník - RVP/ŠVP**\n\n**RVP**\n\nRámcový vzdělávací program pro obor vzdělání Lyceum je dokument na národní úrovni, který formuluje požadavky na školní vzdělávací programy ve formě především očekávaných výsledků učení, kterých mají žáci absolvováním tohoto programu na dané škole dosáhnout.\n\n**ŠVP**\n\nŠkolní vzdělávací program pro obor vzdělání Lyceum je dokument každé jednotlivé školy, který popisuje v jakých vyučovacích předmětech/ vzdělávacích modulech a v jakých ročnících budou požadované očekávané výsledky učení naplněny. Zároveň formuluje další očekávané výsledky učení, které naplňují disponibilní část vyučovacího času určeného RVP pro tento obor vzdělání.\n\n**Očekávaný výsledek učení (OVU)**\n\nVyjadřuje jednotlivý požadavek na to, co mají žáci umět na konci vzdělávacího programu, tzn. jejich požadované kompetence. Je vyjádřen formulací, která je uvozena činnostním slovesem a dále obsahuje předmět této činnosti. Formulace je konkretizována resp. doplněna zpravidla formou odrážek vymezením dílčích znalostí, dovedností, postojů, jejichž splnění je předpokladem dosažení OVU jako celku.\n\n_Příklad:_\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th><p><strong>Žák/žákyně řídí realizaci jednoduchého projektu</strong></p></th></tr><tr><td><ul><li>naplánuje aktivity projektu</li></ul></td></tr><tr><td><ul><li>navrhne rozpočet projektu vzhledem k navrženým aktivitám</li></ul></td></tr><tr><td><ul><li>stanoví základní ukazatele a sleduje jejich naplňování</li></ul></td></tr><tr><td><ul><li>vede projektový tým</li></ul></td></tr><tr><td><ul><li>uvede, jak by řešil krizové situace v projektu</li></ul></td></tr><tr><td><ul><li>vyhodnotí úspěšnost projektu</li></ul></td></tr></tbody></table></div>\n\n**Vzdělávací oblasti**\n\nOčekávané výsledky učení jsou v **_RVP členěny do 4 vzdělávacích oblastí_**, které tvoří společný všeobecně vzdělávací základ:\n\n- Osobnostní rozvoj, vzdělávání ke zdraví, bezpečí a produktivnímu pracovnímu životu (kariéře)\n- Komunikační a jazykové vzdělávání\n- Aplikované vzdělávání STEM (Science, Technology, Engeneering, Math), tj. přírodní vědy, informatika, technika, matematika\n- Prakticky orientované vzdělávání společenskovědní a humanitní\n\nKaždá vzdělávací oblast se dále člení na okruhy, v jejichž rámci jsou OVU samostatně číslované.\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th rowspan=\"21\"><ul><li>Prakticky orientované vzdělávání společenskovědní a humanitní</li></ul></th><th rowspan=\"21\"><p><strong>Člověk, ekonomie a podnikání</strong></p></th><th rowspan=\"7\"><p><strong>1</strong></p></th><th><p><strong>zpracuje podklady související s podnikáním</strong></p></th></tr><tr><td><p>připraví podnikatelský záměr</p></td></tr><tr><td><p>sestaví zakladatelský rozpočet</p></td></tr><tr><td><p>zkalkuluje cenu zboží nebo služby</p></td></tr><tr><td><p>vysvětlí na příkladu základní povinnosti podnikatele vůči státu a zaměstnancům</p></td></tr><tr><td><p>vede daňovou evidenci</p></td></tr><tr><td><p>vysvětlí na příkladech etiku v podnikání</p></td></tr><tr><td rowspan=\"7\"><p><strong>2</strong></p></td><td><p><strong>řídí realizaci jednoduchého projektu</strong></p></td></tr><tr><td><p>naplánuje aktivity projektu</p></td></tr><tr><td><p>navrhne rozpočet projektu vzhledem k navrženým aktivitám</p></td></tr><tr><td><p>stanoví základní ukazatele a sleduje jejich naplňování</p></td></tr><tr><td><p>vede projektový tým</p></td></tr><tr><td><p>uvede, jak by řešil krizové situace v projektu</p></td></tr><tr><td><p>vyhodnotí úspěšnost projektu</p></td></tr><tr><td rowspan=\"7\"><p><strong>3</strong></p></td><td><p><strong>aplikuje ekonomické teorie v osobním a profesním životě</strong></p></td></tr><tr><td><p>vysvětlí základní ekonomické otázky</p></td></tr><tr><td><p>vysvětí stanovení rovnovážné ceny na dokonalém i nedokonalém trhu</p></td></tr><tr><td><p>charakterizuje výrobní faktory a vysvětlí hranici produkčních možností a náklady obětované příležitosti</p></td></tr><tr><td><p>uvede nejdůležitější makroekonomické pojmy a vliv jejich výše na kvalitu života a podnikání v daném státě</p></td></tr><tr><td><p>vysvětlí podstatu inflace a její důsledky na finanční situaci obyvatel a na příkladu ukáže jak se bránit jejím nepříznivým důsledkům</p></td></tr><tr><td><p>uvede hlavní výhody a nevýhody mezinárodního obchodu a vliv ochranářských opatření na ekonomickou situaci dané země</p></td></tr><tr><td></td><td></td><td><p><strong>4</strong></p></td><td><p>Atd.</p></td></tr></tbody></table></div>\n\n**Vyučovací předmět / vzdělávací modul**\n\nOčekávané výsledky učení jsou v **ŠVP** členěny do vyučovacích předmětů nebo vzdělávacích modulů, které jsou dále zařazeny do jednoho nebo více ročníků 4letého studia. Vyučovací předmět / vzdělávací modul tvoří vyučovací jednotku, kde jsou očekávané výsledky učení dále rozpracovány pro potřeby výuky podle následující šablony\n\n| **A. VSTUPNÍ ČÁST** |\n| --- |\n| **1\\. Název** |\n| **2\\. Kód** (kódy by měly být navázány na obory vzdělání a výsledky učení) |\n| **2a) Kategorie vzdělání** - v případě, že nebude součástí kódu |\n| **3\\. Typ vyučovací jednotky** (modul, předmět, stáž apod.) |\n| **4\\. Délka** (počet hodin - dělitelný čtyřmi (optimální modul 16, 32 hodin = týden výuky) |\n| **5\\. Platnost** (datum, od kterého platí) |\n| **6\\. Vstupní předpoklady** (vymezení požadované úrovně vstupních vědomostí a dovedností, které jsou předpokladem úspěšného studia) |\n| |\n| **B. JÁDRO VYUČOVACÍ JEDNOTKY** |\n| **1\\. Charakteristika** (stručná anotace popisující obecné cíle a pojetí) |\n| **2\\. Očekávané výsledky učení a jejich indikátory (převzaté z RVP nebo dále konkretizované)** |\n| **3\\. Podpora rozvoje klíčových kompetencí a základních gramotností** (které klíčové kompetence jsou v rozvíjeny) |\n| **4\\. Obsah vzdělávání** (rozpis učiva) |\n| **5\\. Vzdělávací strategie** (strategie výuky, resp. učební činnosti žáků, které jsou doporučené pro dosažení výsledků) |\n| |\n| **C. VÝSTUPNÍ ČÁST** |\n| **1\\. Způsob ověřování dosažených výsledků** (ve vazbě na jednotlivé výsledky učení) |\n| **2\\. Kritéria hodnocení** (co znamená splnění výsledků učení, kdy je splněna celá vyučovací jednotka, kritéria pro známky, příp. procentuální, slovní hodnocení) |\n| **3\\. Doporučená studijní literatura, odkazy na ilustrační zdroje** |\n| **4\\. Poznámky** |\n\n**Soulad OVU RVP a ŠVP**\n\nTento soulad je předmětem zjišťování. Soulad nastává, jestliže jsou očekávané výsledky učení z jednotlivých vzdělávacích oblastí RVP **obsaženy** ve vyučovacích předmětech/ vzdělávacích modulech ŠVP jednotlivých škol, tzn. že v ŠVP se objevuje jejich formulace buď v doslovném nebo podobném znění v jednom nebo více vyučovacích předmětech/ vzdělávacích modulech.\n\n_Příklad souladu:_\n\nRVP ŠVP - komunikace a marketing (SŠ obchodní Č.\n\n| **2** | **řídí realizaci jednoduchého projektu** |\n| --- | --- |\n| naplánuje aktivity projektu |\n| navrhne rozpočet projektu vzhledem k navrženým aktivitám |\n| stanoví základní ukazatele a sleduje jejich naplňování |\n| vede projektový tým |\n| uvede, jak by řešil krizové situace v projektu |\n| vyhodnotí úspěšnost projektu |\n\nKNOWLEDGE {Porovnání RVP a ŠVP - postup}\n\n\n# AUDITNÍ PROTOKOL ŠVP-RVP\n\n# (POPIS KONTROLNÍHO ALGORITMU)\n\nMetodika je určena pro **Kvantifikaci Shody** školního vzdělávacího programu (ŠVP) s Rámcovým vzdělávacím programem (RVP).\n\n## FÁZE 1: VALIDACE DOKUMENTACE\n\n**Cíl:** Ověřit platnost, aktuálnost a strukturu zdrojových dokumentů.\n\n- **RVP Verifikace:** Otevřít aktuální verzi RVP (např. RVP ZV/G/SOŠ).\n- **Typová shoda:** Ověřit, že RVP se vztahuje k danému typu školy.\n- **ŠVP Dimenze:** Identifikovat a izolovat relevantní části ŠVP: Profil absolventa, Klíčové kompetence (KK), Vzdělávací oblasti (VO), případně Učební plán (UP).\n- **Verzování:** Potvrdit, že obě verze (RVP a ŠVP) jsou nejnovější a platné (včetně dodatků RVP).\n\n## FÁZE 2: DATABÁZOVÉ MAPOVÁNÍ VÝSTUPŮ (MASTER MATICE)\n\n**Cíl:** Vytvořit systémovou databázi pro křížové porovnání všech povinných komponent RVP se ŠVP.\n\n- **Dekompozice RVP:** Rozložit RVP na základní povinné komponenty: Klíčové kompetence, Vzdělávací oblasti a obory, Očekávané výstupy (OVU), Průřezová témata (PT).\n- **Přiřazovací mapa:** Vytvořit hlavní kontrolní matici (Master Matice) pro záznam vazeb.\n\n| Oblast RVP | Výstup RVP (OVU) | Odpovídající Část ŠVP (Předmět/Ročník) | Konkrétní Tématický Celek v ŠVP | Stav Shody (Protokol) |\n| --- | --- | --- | --- | --- |\n| ... | ... | ... | ... | ... |\n| --- | --- | --- | --- | --- |\n\n## FÁZE 3: ALGORITMICKÁ KONTROLA POKRYTÍ A HLOUBKY\n\n**Cíl:** Posoudit, zda každý povinný výstup RVP je adekvátně reflektován v obsahu ŠVP, a přidělit bodovou hodnotu pro kvantifikaci.\n\n- **Audit OVU:** Projít každý jednotlivý Očekávaný výstup (OVU) z RVP.\n- **Kódování stavu a bodování:** U každého OVU v matici označit stav pokrytí dle následujícího schématu:\n\n| Kód (Protokol) | Popis (Kvalitativní zjištění) | Bodová hodnota (Kvantifikace) |\n| --- | --- | --- |\n| ✅ | Plná shoda (Výstup pokryt v plném rozsahu, odpovídající úrovni RVP) | 1,0 |\n| --- | --- | --- |\n| ⚠️ | Částečná shoda (Formální pokrytí, omezený rozsah, chybná návaznost) | 0,5 |\n| --- | --- | --- |\n| ❌ | Absence (Výstup zcela chybí v obsahu ŠVP) | 0,0 |\n| --- | --- | --- |\n\n- **Defektologie ŠVP:** Identifikovat a zaznamenat deficity ŠVP: Chybějící výstupy (❌), Sémantické překryvy, Přetížení obsahu.\n- **Kvalitativní posun:** Ověřit, zda je formulace výstupů v ŠVP **aktivní, měřitelná a v souladu** s úrovní RVP.\n\n## FÁZE 4: STRUKTURÁLNÍ VERIFIKACE NÁVAZNOSTI (VERTIKÁLA/HORIZONTÁLA)\n\n**Cíl:** Zkontrolovat logickou posloupnost a provázanost učiva v rámci ŠVP.\n\n- **Vertikální Kontrola:** Ověřit posloupnost OVU a učiva uvnitř jednoho předmětu/oblasti (postup od jednodušších ke složitějším konceptům napříč ročníky).\n- **Horizontální Kontrola:** Zkontrolovat logické provázání napříč vzdělávacími oblastmi a předměty (např. fyzika ↔ matematika).\n- **PT Integrace:** Audit reálné integrace Průřezových témat (PT) do konkrétních částí obsahu, metod a projektů.\n\n## FÁZE 5: ANALÝZA ŠKOLNÍ PROFILACE A ROZŠÍŘENÍ RVP\n\n**Cíl:** Validovat, že profilace školy je **v souladu** s RVP a nejedná se o **rozpor**.\n\n- **Nekonfliktnost:** Porovnat definovaný Profil absolventa školy s Klíčovými kompetencemi RVP. Profil ŠVP musí RVP rozvíjet, nikoli mu odporovat.\n- **Modularita:** Zkontrolovat, zda volitelné předměty a rozšiřující moduly logicky navazují na vzdělávací oblasti RVP.\n- **Implementace specializace:** Popisně uvést, jak je školní profilace (např. STEM zaměření, projektová výuka) integrována do OVU a kompetencí definovaných RVP.\n\n## FÁZE 6: GENERÁTOR ZÁVĚREČNÉ ZPRÁVY A KVANTIFIKACE\n\n**Cíl:** Syntetizovat výsledky, kvantifikovat soulad a generovat závazné návrhy na korekce.\n\n### 6.1 Kvantifikace Souladu\n\nVypočítat Index shody (IS) na základě bodového hodnocení (Fáze 3):\n\n### 6.2 Interpretace Indexu Shody (IS)\n\nKlasifikace souladu pro standardizované vyhodnocení:\n\n| Interval IS | Klasifikace souladu | Popis |\n| --- | --- | --- |\n| 95-100 % | Výborný soulad | ŠVP plně odpovídá RVP, pouze stylistické nebo formální rozdíly. |\n| --- | --- | --- |\n| 85-94 % | Dobrá shoda | ŠVP pokrývá všechny klíčové výstupy, menší korekce nutné. |\n| --- | --- | --- |\n| 70-84 % | Částečná shoda | Významné nedostatky v některých oblastech, nutná revize obsahu. |\n| --- | --- | --- |\n| < 70 % | Kritická neshoda | ŠVP neplní rámcové požadavky, ohrožuje legislativní soulad. |\n| --- | --- | --- |\n\n### 6.3 Doplňkové Indexy\n\nVypočítat následující doplňkové indexy pro detailní kvalitativní analýzu:\n\n- **Index kompetenčního souladu (IKS):** Poměr pokrytí klíčových kompetencí RVP v ŠVP.\n- **Index průřezové integrace (IPI):** Míra reálné integrace průřezových témat do výuky.\n- **Index hloubky pokrytí (IHP):** Procento výstupů, které jsou v ŠVP rozvedeny na konkrétní výukové cíle (měřitelné, aktivní formulace).\n- **Index profilové rozšiřitelnosti (IPR):** Kolik rozšiřujících nebo profilových výstupů přesahuje rámec RVP, aniž by narušily jeho strukturu.\n\n### 6.4 Vizuální výstupy\n\nZajistit generování následujících vizualizací pro Závěrečnou zprávu:\n\n- Graf pokrytí po vzdělávacích oblastech (Sloupcový graf IS pro VO).\n- Pavoukový diagram Klíčových kompetencí (RVP vs. ŠVP).\n- Mapa defektů (Vizualizace ❌ a ⚠️ výstupů).\n\n### 6.5 Struktura Závěrečné Zprávy\n\nZpráva musí být strukturována dle standardizovaného formátu:\n\n| Oddíl | Obsah |\n| --- | --- |\n| A. Identifikace | Název školy, IZO, typ školy, datum revize, zpracovatel, verze ŠVP a RVP. |\n| --- | --- |\n| B. Shrnutí výsledků | Celkový Index Shody (IS), hlavní závěry a doporučení. |\n| --- | --- |\n| C. Kvantitativní analýza | Přehled IS v % dle kategorií OVU / VO / kompetencí. |\n| --- | --- |\n| D. Kvalitativní analýza | Slovní zhodnocení kvality souladu (formulace, obtížnost, integrace PT). |\n| --- | --- |\n| E. Rizikové oblasti | Přehled nalezených defektů (chybějící OVU, přetížení, formální shoda). |\n| --- | --- |\n| F. Návrhy opatření (Korekční plán) | Přesné návrhy změn - **Co, Kde, Kdo** má upravit, včetně termínu. |\n| --- | --- |\n| G. Přílohy | Master Matice (Fáze 2-3), revizní tabulka, výstupní grafy a metriky. |\n| --- | --- |\n\n\n\n\n.\n"}],sourceFile:"./books/examples/lsvp-asistent.book"}];
1809
+ var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModels",description:"List of available model names together with their descriptions as JSON",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelsRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n```json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n```\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n```json\n{availableModels}\n```\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelsRequirements",format:"JSON",dependentParameterNames:["availableModels","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModels}` List of available model names together with their descriptions as JSON\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelsRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n\\`\\`\\`json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n\\`\\`\\`json\n{availableModels}\n\\`\\`\\`\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelsRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"}];
1820
1810
 
1821
1811
  /**
1822
1812
  * Checks if value is valid email
@@ -1858,7 +1848,7 @@
1858
1848
  constructor(whatWasThrown) {
1859
1849
  const tag = `[🤮]`;
1860
1850
  console.error(tag, whatWasThrown);
1861
- super(spaceTrim.spaceTrim(`
1851
+ super(spaceTrim$1.spaceTrim(`
1862
1852
  Non-Error object was thrown
1863
1853
 
1864
1854
  Note: Look for ${tag} in the console for more details
@@ -1923,6 +1913,8 @@
1923
1913
  * Function `validatePipelineString` will validate the if the string is a valid pipeline string
1924
1914
  * It does not check if the string is fully logically correct, but if it is a string that can be a pipeline string or the string looks completely different.
1925
1915
  *
1916
+ * Note: [🔂] This function is idempotent.
1917
+ *
1926
1918
  * @param {string} pipelineString the candidate for a pipeline string
1927
1919
  * @returns {PipelineString} the same string as input, but validated as valid
1928
1920
  * @throws {ParseError} if the string is not a valid pipeline string
@@ -2307,7 +2299,7 @@
2307
2299
  TODO: [🧠] Is there a better implementation?
2308
2300
  > const propertyNames = Object.getOwnPropertyNames(objectValue);
2309
2301
  > for (const propertyName of propertyNames) {
2310
- > const value = (objectValue as really_any)[propertyName];
2302
+ > const value = (objectValue as chococake)[propertyName];
2311
2303
  > if (value && typeof value === 'object') {
2312
2304
  > deepClone(value);
2313
2305
  > }
@@ -2512,6 +2504,8 @@
2512
2504
  * - if it is valid json
2513
2505
  * - if it is meaningful
2514
2506
  *
2507
+ * Note: [🔂] This function is idempotent.
2508
+ *
2515
2509
  * @param pipeline valid or invalid PipelineJson
2516
2510
  * @returns the same pipeline if it is logically valid
2517
2511
  * @throws {PipelineLogicError} on logical error in the pipeline
@@ -2529,7 +2523,7 @@
2529
2523
  if (!(error instanceof PipelineLogicError)) {
2530
2524
  throw error;
2531
2525
  }
2532
- console.error(spaceTrim.spaceTrim((block) => `
2526
+ console.error(spaceTrim$1.spaceTrim((block) => `
2533
2527
  Pipeline is not valid but logic errors are temporarily disabled via \`IS_PIPELINE_LOGIC_VALIDATED\`
2534
2528
 
2535
2529
  ${block(error.message)}
@@ -2556,7 +2550,7 @@
2556
2550
  })();
2557
2551
  if (pipeline.pipelineUrl !== undefined && !isValidPipelineUrl(pipeline.pipelineUrl)) {
2558
2552
  // <- Note: [🚲]
2559
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2553
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2560
2554
  Invalid promptbook URL "${pipeline.pipelineUrl}"
2561
2555
 
2562
2556
  ${block(pipelineIdentification)}
@@ -2564,7 +2558,7 @@
2564
2558
  }
2565
2559
  if (pipeline.bookVersion !== undefined && !isValidPromptbookVersion(pipeline.bookVersion)) {
2566
2560
  // <- Note: [🚲]
2567
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2561
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2568
2562
  Invalid Promptbook Version "${pipeline.bookVersion}"
2569
2563
 
2570
2564
  ${block(pipelineIdentification)}
@@ -2573,7 +2567,7 @@
2573
2567
  // TODO: [🧠] Maybe do here some proper JSON-schema / ZOD checking
2574
2568
  if (!Array.isArray(pipeline.parameters)) {
2575
2569
  // TODO: [🧠] what is the correct error tp throw - maybe PromptbookSchemaError
2576
- throw new ParseError(spaceTrim.spaceTrim((block) => `
2570
+ throw new ParseError(spaceTrim$1.spaceTrim((block) => `
2577
2571
  Pipeline is valid JSON but with wrong structure
2578
2572
 
2579
2573
  \`PipelineJson.parameters\` expected to be an array, but got ${typeof pipeline.parameters}
@@ -2584,7 +2578,7 @@
2584
2578
  // TODO: [🧠] Maybe do here some proper JSON-schema / ZOD checking
2585
2579
  if (!Array.isArray(pipeline.tasks)) {
2586
2580
  // TODO: [🧠] what is the correct error tp throw - maybe PromptbookSchemaError
2587
- throw new ParseError(spaceTrim.spaceTrim((block) => `
2581
+ throw new ParseError(spaceTrim$1.spaceTrim((block) => `
2588
2582
  Pipeline is valid JSON but with wrong structure
2589
2583
 
2590
2584
  \`PipelineJson.tasks\` expected to be an array, but got ${typeof pipeline.tasks}
@@ -2610,7 +2604,7 @@
2610
2604
  // Note: Check each parameter individually
2611
2605
  for (const parameter of pipeline.parameters) {
2612
2606
  if (parameter.isInput && parameter.isOutput) {
2613
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2607
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2614
2608
 
2615
2609
  Parameter \`{${parameter.name}}\` can not be both input and output
2616
2610
 
@@ -2621,7 +2615,7 @@
2621
2615
  if (!parameter.isInput &&
2622
2616
  !parameter.isOutput &&
2623
2617
  !pipeline.tasks.some((task) => task.dependentParameterNames.includes(parameter.name))) {
2624
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2618
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2625
2619
  Parameter \`{${parameter.name}}\` is created but not used
2626
2620
 
2627
2621
  You can declare {${parameter.name}} as output parameter by adding in the header:
@@ -2633,7 +2627,7 @@
2633
2627
  }
2634
2628
  // Note: Testing that parameter is either input or result of some task
2635
2629
  if (!parameter.isInput && !pipeline.tasks.some((task) => task.resultingParameterName === parameter.name)) {
2636
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2630
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2637
2631
  Parameter \`{${parameter.name}}\` is declared but not defined
2638
2632
 
2639
2633
  You can do one of these:
@@ -2649,14 +2643,14 @@
2649
2643
  // Note: Checking each task individually
2650
2644
  for (const task of pipeline.tasks) {
2651
2645
  if (definedParameters.has(task.resultingParameterName)) {
2652
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2646
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2653
2647
  Parameter \`{${task.resultingParameterName}}\` is defined multiple times
2654
2648
 
2655
2649
  ${block(pipelineIdentification)}
2656
2650
  `));
2657
2651
  }
2658
2652
  if (RESERVED_PARAMETER_NAMES.includes(task.resultingParameterName)) {
2659
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2653
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2660
2654
  Parameter name {${task.resultingParameterName}} is reserved, please use different name
2661
2655
 
2662
2656
  ${block(pipelineIdentification)}
@@ -2666,7 +2660,7 @@
2666
2660
  if (task.jokerParameterNames && task.jokerParameterNames.length > 0) {
2667
2661
  if (!task.format &&
2668
2662
  !task.expectations /* <- TODO: Require at least 1 -> min <- expectation to use jokers */) {
2669
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2663
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2670
2664
  Joker parameters are used for {${task.resultingParameterName}} but no expectations are defined
2671
2665
 
2672
2666
  ${block(pipelineIdentification)}
@@ -2674,7 +2668,7 @@
2674
2668
  }
2675
2669
  for (const joker of task.jokerParameterNames) {
2676
2670
  if (!task.dependentParameterNames.includes(joker)) {
2677
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2671
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2678
2672
  Parameter \`{${joker}}\` is used for {${task.resultingParameterName}} as joker but not in \`dependentParameterNames\`
2679
2673
 
2680
2674
  ${block(pipelineIdentification)}
@@ -2685,21 +2679,21 @@
2685
2679
  if (task.expectations) {
2686
2680
  for (const [unit, { min, max }] of Object.entries(task.expectations)) {
2687
2681
  if (min !== undefined && max !== undefined && min > max) {
2688
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2682
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2689
2683
  Min expectation (=${min}) of ${unit} is higher than max expectation (=${max})
2690
2684
 
2691
2685
  ${block(pipelineIdentification)}
2692
2686
  `));
2693
2687
  }
2694
2688
  if (min !== undefined && min < 0) {
2695
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2689
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2696
2690
  Min expectation of ${unit} must be zero or positive
2697
2691
 
2698
2692
  ${block(pipelineIdentification)}
2699
2693
  `));
2700
2694
  }
2701
2695
  if (max !== undefined && max <= 0) {
2702
- throw new PipelineLogicError(spaceTrim.spaceTrim((block) => `
2696
+ throw new PipelineLogicError(spaceTrim$1.spaceTrim((block) => `
2703
2697
  Max expectation of ${unit} must be positive
2704
2698
 
2705
2699
  ${block(pipelineIdentification)}
@@ -2721,7 +2715,7 @@
2721
2715
  while (unresovedTasks.length > 0) {
2722
2716
  if (loopLimit-- < 0) {
2723
2717
  // Note: Really UnexpectedError not LimitReachedError - this should not happen and be caught below
2724
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
2718
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
2725
2719
  Loop limit reached during detection of circular dependencies in \`validatePipeline\`
2726
2720
 
2727
2721
  ${block(pipelineIdentification)}
@@ -2731,7 +2725,7 @@
2731
2725
  if (currentlyResovedTasks.length === 0) {
2732
2726
  throw new PipelineLogicError(
2733
2727
  // TODO: [🐎] DRY
2734
- spaceTrim.spaceTrim((block) => `
2728
+ spaceTrim$1.spaceTrim((block) => `
2735
2729
 
2736
2730
  Can not resolve some parameters:
2737
2731
  Either you are using a parameter that is not defined, or there are some circular dependencies.
@@ -2878,7 +2872,7 @@
2878
2872
  * Library of pipelines that groups together pipelines for an application.
2879
2873
  * This implementation is a very thin wrapper around the Array / Map of pipelines.
2880
2874
  *
2881
- * @private internal function of `createCollectionFromJson`, use `createCollectionFromJson` instead
2875
+ * @private internal function of `createPipelineCollectionFromJson`, use `createPipelineCollectionFromJson` instead
2882
2876
  * @see https://github.com/webgptorg/pipeline#pipeline-collection
2883
2877
  */
2884
2878
  class SimplePipelineCollection {
@@ -2888,14 +2882,14 @@
2888
2882
  * @param pipelines Array of pipeline JSON objects to include in the collection
2889
2883
  *
2890
2884
  * Note: During the construction logic of all pipelines are validated
2891
- * Note: It is not recommended to use this constructor directly, use `createCollectionFromJson` *(or other variant)* instead
2885
+ * Note: It is not recommended to use this constructor directly, use `createPipelineCollectionFromJson` *(or other variant)* instead
2892
2886
  */
2893
2887
  constructor(...pipelines) {
2894
2888
  this.collection = new Map();
2895
2889
  for (const pipeline of pipelines) {
2896
2890
  // TODO: [👠] DRY
2897
2891
  if (pipeline.pipelineUrl === undefined) {
2898
- throw new PipelineUrlError(spaceTrim.spaceTrim(`
2892
+ throw new PipelineUrlError(spaceTrim$1.spaceTrim(`
2899
2893
  Pipeline with name "${pipeline.title}" does not have defined URL
2900
2894
 
2901
2895
  File:
@@ -2917,7 +2911,7 @@
2917
2911
  pipelineJsonToString(unpreparePipeline(pipeline)) !==
2918
2912
  pipelineJsonToString(unpreparePipeline(this.collection.get(pipeline.pipelineUrl)))) {
2919
2913
  const existing = this.collection.get(pipeline.pipelineUrl);
2920
- throw new PipelineUrlError(spaceTrim.spaceTrim(`
2914
+ throw new PipelineUrlError(spaceTrim$1.spaceTrim(`
2921
2915
  Pipeline with URL ${pipeline.pipelineUrl} is already in the collection 🍎
2922
2916
 
2923
2917
  Conflicting files:
@@ -2949,13 +2943,13 @@
2949
2943
  const pipeline = this.collection.get(url);
2950
2944
  if (!pipeline) {
2951
2945
  if (this.listPipelines().length === 0) {
2952
- throw new NotFoundError(spaceTrim.spaceTrim(`
2946
+ throw new NotFoundError(spaceTrim$1.spaceTrim(`
2953
2947
  Pipeline with url "${url}" not found
2954
2948
 
2955
2949
  No pipelines available
2956
2950
  `));
2957
2951
  }
2958
- throw new NotFoundError(spaceTrim.spaceTrim((block) => `
2952
+ throw new NotFoundError(spaceTrim$1.spaceTrim((block) => `
2959
2953
  Pipeline with url "${url}" not found
2960
2954
 
2961
2955
  Available pipelines:
@@ -2976,16 +2970,16 @@
2976
2970
  }
2977
2971
 
2978
2972
  /**
2979
- * Creates PipelineCollection from array of PipelineJson or PipelineString
2973
+ * Creates `PipelineCollection` from array of PipelineJson or PipelineString
2980
2974
  *
2981
- * Note: Functions `collectionToJson` and `createCollectionFromJson` are complementary
2975
+ * Note: Functions `pipelineCollectionToJson` and `createPipelineCollectionFromJson` are complementary
2982
2976
  * Note: Syntax, parsing, and logic consistency checks are performed on all sources during build
2983
2977
  *
2984
2978
  * @param promptbookSources
2985
2979
  * @returns PipelineCollection
2986
2980
  * @public exported from `@promptbook/core`
2987
2981
  */
2988
- function createCollectionFromJson(...promptbooks) {
2982
+ function createPipelineCollectionFromJson(...promptbooks) {
2989
2983
  return new SimplePipelineCollection(...promptbooks);
2990
2984
  }
2991
2985
 
@@ -2996,7 +2990,7 @@
2996
2990
  */
2997
2991
  class MissingToolsError extends Error {
2998
2992
  constructor(message) {
2999
- super(spaceTrim.spaceTrim((block) => `
2993
+ super(spaceTrim$1.spaceTrim((block) => `
3000
2994
  ${block(message)}
3001
2995
 
3002
2996
  Note: You have probably forgot to provide some tools for pipeline execution or preparation
@@ -3010,6 +3004,7 @@
3010
3004
  /**
3011
3005
  * Generates random token
3012
3006
  *
3007
+ * Note: `$` is used to indicate that this function is not a pure function - it is not deterministic
3013
3008
  * Note: This function is cryptographically secure (it uses crypto.randomBytes internally)
3014
3009
  *
3015
3010
  * @private internal helper function
@@ -3019,6 +3014,7 @@
3019
3014
  return crypto.randomBytes(randomness).toString('hex');
3020
3015
  }
3021
3016
  /**
3017
+ * TODO: [🤶] Maybe export through `@promptbook/utils` or `@promptbook/random` package
3022
3018
  * TODO: Maybe use nanoid instead https://github.com/ai/nanoid
3023
3019
  */
3024
3020
 
@@ -3137,6 +3133,22 @@
3137
3133
  }
3138
3134
  }
3139
3135
 
3136
+ /**
3137
+ * This error indicates error from the database
3138
+ *
3139
+ * @public exported from `@promptbook/core`
3140
+ */
3141
+ class DatabaseError extends Error {
3142
+ constructor(message) {
3143
+ super(message);
3144
+ this.name = 'DatabaseError';
3145
+ Object.setPrototypeOf(this, DatabaseError.prototype);
3146
+ }
3147
+ }
3148
+ /**
3149
+ * TODO: [🐱‍🚀] Explain that NotFoundError ([🐱‍🚀] and other specific errors) has priority over DatabaseError in some contexts
3150
+ */
3151
+
3140
3152
  /**
3141
3153
  * This error occurs when some expectation is not met in the execution of the pipeline
3142
3154
  *
@@ -3166,6 +3178,19 @@
3166
3178
  }
3167
3179
  }
3168
3180
 
3181
+ /**
3182
+ * This error indicates that promptbook operation is not allowed
3183
+ *
3184
+ * @public exported from `@promptbook/core`
3185
+ */
3186
+ class NotAllowed extends Error {
3187
+ constructor(message) {
3188
+ super(message);
3189
+ this.name = 'NotAllowed';
3190
+ Object.setPrototypeOf(this, NotAllowed.prototype);
3191
+ }
3192
+ }
3193
+
3169
3194
  /**
3170
3195
  * This error type indicates that some part of the code is not implemented yet
3171
3196
  *
@@ -3173,7 +3198,7 @@
3173
3198
  */
3174
3199
  class NotYetImplementedError extends Error {
3175
3200
  constructor(message) {
3176
- super(spaceTrim.spaceTrim((block) => `
3201
+ super(spaceTrim$1.spaceTrim((block) => `
3177
3202
  ${block(message)}
3178
3203
 
3179
3204
  Note: This feature is not implemented yet but it will be soon.
@@ -3226,6 +3251,8 @@
3226
3251
  PromptbookFetchError,
3227
3252
  UnexpectedError,
3228
3253
  WrappedError,
3254
+ NotAllowed,
3255
+ DatabaseError,
3229
3256
  // TODO: [🪑]> VersionMismatchError,
3230
3257
  };
3231
3258
  /**
@@ -3410,11 +3437,11 @@
3410
3437
  throw deserializeError(errors[0]);
3411
3438
  }
3412
3439
  else {
3413
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
3440
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
3414
3441
  Multiple errors occurred during Promptbook execution
3415
3442
 
3416
3443
  ${block(errors
3417
- .map(({ name, stack, message }, index) => spaceTrim.spaceTrim((block) => `
3444
+ .map(({ name, stack, message }, index) => spaceTrim$1.spaceTrim((block) => `
3418
3445
  ${name} ${index + 1}:
3419
3446
  ${block(stack || message)}
3420
3447
  `))
@@ -3441,6 +3468,7 @@
3441
3468
  let updatedAt = createdAt;
3442
3469
  const errors = [];
3443
3470
  const warnings = [];
3471
+ const llmCalls = [];
3444
3472
  let currentValue = {};
3445
3473
  let customTldr = null;
3446
3474
  const partialResultSubject = new rxjs.Subject();
@@ -3456,6 +3484,9 @@
3456
3484
  }, (tldrInfo) => {
3457
3485
  customTldr = tldrInfo;
3458
3486
  updatedAt = new Date();
3487
+ }, (llmCall) => {
3488
+ llmCalls.push(llmCall);
3489
+ updatedAt = new Date();
3459
3490
  });
3460
3491
  finalResultPromise
3461
3492
  .catch((error) => {
@@ -3578,7 +3609,7 @@
3578
3609
  }
3579
3610
  return {
3580
3611
  percent: percent,
3581
- message,
3612
+ message: message + ' (!!!fallback)',
3582
3613
  };
3583
3614
  },
3584
3615
  get createdAt() {
@@ -3601,6 +3632,10 @@
3601
3632
  return warnings;
3602
3633
  // <- Note: [1] --||--
3603
3634
  },
3635
+ get llmCalls() {
3636
+ return [...llmCalls, { foo: '!!! bar' }];
3637
+ // <- Note: [1] --||--
3638
+ },
3604
3639
  get currentValue() {
3605
3640
  return currentValue;
3606
3641
  // <- Note: [1] --||--
@@ -4054,6 +4089,7 @@
4054
4089
  return new MultipleLlmExecutionTools(title || 'Multiple LLM Providers joined by `joinLlmExecutionTools`', ...llmExecutionTools);
4055
4090
  }
4056
4091
  /**
4092
+ * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4057
4093
  * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4058
4094
  */
4059
4095
 
@@ -4070,6 +4106,7 @@
4070
4106
  return llmTools;
4071
4107
  }
4072
4108
  /**
4109
+ * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4073
4110
  * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4074
4111
  */
4075
4112
 
@@ -4085,7 +4122,7 @@
4085
4122
  throw new MissingToolsError('LLM tools are required for preparing persona');
4086
4123
  }
4087
4124
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
4088
- const collection = createCollectionFromJson(...PipelineCollection);
4125
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
4089
4126
  const preparePersonaExecutor = createPipelineExecutor({
4090
4127
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-persona.book'),
4091
4128
  tools,
@@ -4803,7 +4840,7 @@
4803
4840
  if (task.taskType === 'PROMPT_TASK' &&
4804
4841
  knowledgePiecesCount > 0 &&
4805
4842
  !dependentParameterNames.includes('knowledge')) {
4806
- preparedContent = spaceTrim.spaceTrim(`
4843
+ preparedContent = spaceTrim$1.spaceTrim(`
4807
4844
  {content}
4808
4845
 
4809
4846
  ## Knowledge
@@ -4889,7 +4926,7 @@
4889
4926
  let title = pipeline.title;
4890
4927
  if (title === undefined || title === '' || title === DEFAULT_BOOK_TITLE) {
4891
4928
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
4892
- const collection = createCollectionFromJson(...PipelineCollection);
4929
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
4893
4930
  const prepareTitleExecutor = createPipelineExecutor({
4894
4931
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-title.book'),
4895
4932
  tools,
@@ -5116,7 +5153,7 @@
5116
5153
  }
5117
5154
  catch (error) {
5118
5155
  assertsError(error);
5119
- throw new ParseError(spaceTrim.spaceTrim((block) => `
5156
+ throw new ParseError(spaceTrim$1.spaceTrim((block) => `
5120
5157
  Can not extract variables from the script
5121
5158
  ${block(error.stack || error.message)}
5122
5159
 
@@ -5801,10 +5838,13 @@
5801
5838
  * @public exported from `@promptbook/utils`
5802
5839
  */
5803
5840
  function countLines(text) {
5841
+ if (text === '') {
5842
+ return 0;
5843
+ }
5804
5844
  text = text.replace('\r\n', '\n');
5805
5845
  text = text.replace('\r', '\n');
5806
5846
  const lines = text.split('\n');
5807
- return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
5847
+ return lines.reduce((count, line) => count + Math.max(Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 1), 0);
5808
5848
  }
5809
5849
  /**
5810
5850
  * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
@@ -5929,6 +5969,8 @@
5929
5969
  * This function provides a common abstraction for result validation that can be used
5930
5970
  * by both execution logic and caching logic to ensure consistency.
5931
5971
  *
5972
+ * Note: [🔂] This function is idempotent.
5973
+ *
5932
5974
  * @param options - The validation options including result string, expectations, and format
5933
5975
  * @returns Validation result with processed string and validity status
5934
5976
  * @private internal function of `createPipelineExecutor` and `cacheLlmTools`
@@ -5948,7 +5990,7 @@
5948
5990
  }
5949
5991
  catch (error) {
5950
5992
  keepUnused(error);
5951
- throw new ExpectError(spaceTrim.spaceTrim((block) => `
5993
+ throw new ExpectError(spaceTrim$1.spaceTrim((block) => `
5952
5994
  Expected valid JSON string
5953
5995
 
5954
5996
  The expected JSON text:
@@ -5997,7 +6039,7 @@
5997
6039
  */
5998
6040
  async function executeAttempts(options) {
5999
6041
  const { jokerParameterNames, priority, maxAttempts, // <- Note: [💂]
6000
- preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, } = options;
6042
+ preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, logLlmCall, } = options;
6001
6043
  const $ongoingTaskResult = {
6002
6044
  $result: null,
6003
6045
  $resultString: null,
@@ -6011,7 +6053,7 @@
6011
6053
  const jokerParameterName = jokerParameterNames[jokerParameterNames.length + attemptIndex];
6012
6054
  // TODO: [🧠][🍭] JOKERS, EXPECTATIONS, POSTPROCESSING and FOREACH
6013
6055
  if (isJokerAttempt && !jokerParameterName) {
6014
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6056
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6015
6057
  Joker not found in attempt ${attemptIndex}
6016
6058
 
6017
6059
  ${block(pipelineIdentification)}
@@ -6022,7 +6064,7 @@
6022
6064
  $ongoingTaskResult.$expectError = null;
6023
6065
  if (isJokerAttempt) {
6024
6066
  if (parameters[jokerParameterName] === undefined) {
6025
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6067
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6026
6068
  Joker parameter {${jokerParameterName}} not defined
6027
6069
 
6028
6070
  ${block(pipelineIdentification)}
@@ -6080,7 +6122,7 @@
6080
6122
  $ongoingTaskResult.$resultString = $ongoingTaskResult.$completionResult.content;
6081
6123
  break variant;
6082
6124
  case 'EMBEDDING':
6083
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6125
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6084
6126
  Embedding model can not be used in pipeline
6085
6127
 
6086
6128
  This should be catched during parsing
@@ -6091,7 +6133,7 @@
6091
6133
  break variant;
6092
6134
  // <- case [🤖]:
6093
6135
  default:
6094
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6136
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6095
6137
  Unknown model variant "${task.modelRequirements.modelVariant}"
6096
6138
 
6097
6139
  ${block(pipelineIdentification)}
@@ -6102,14 +6144,14 @@
6102
6144
  break;
6103
6145
  case 'SCRIPT_TASK':
6104
6146
  if (arrayableToArray(tools.script).length === 0) {
6105
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6147
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6106
6148
  No script execution tools are available
6107
6149
 
6108
6150
  ${block(pipelineIdentification)}
6109
6151
  `));
6110
6152
  }
6111
6153
  if (!task.contentLanguage) {
6112
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6154
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6113
6155
  Script language is not defined for SCRIPT TASK "${task.name}"
6114
6156
 
6115
6157
  ${block(pipelineIdentification)}
@@ -6140,7 +6182,7 @@
6140
6182
  throw $ongoingTaskResult.$scriptPipelineExecutionErrors[0];
6141
6183
  }
6142
6184
  else {
6143
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6185
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6144
6186
  Script execution failed ${$ongoingTaskResult.$scriptPipelineExecutionErrors.length}x
6145
6187
 
6146
6188
  ${block(pipelineIdentification)}
@@ -6154,7 +6196,7 @@
6154
6196
  break taskType;
6155
6197
  case 'DIALOG_TASK':
6156
6198
  if (tools.userInterface === undefined) {
6157
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6199
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6158
6200
  User interface tools are not available
6159
6201
 
6160
6202
  ${block(pipelineIdentification)}
@@ -6172,7 +6214,7 @@
6172
6214
  break taskType;
6173
6215
  // <- case: [🅱]
6174
6216
  default:
6175
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6217
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6176
6218
  Unknown execution type "${task.taskType}"
6177
6219
 
6178
6220
  ${block(pipelineIdentification)}
@@ -6245,14 +6287,10 @@
6245
6287
  });
6246
6288
  }
6247
6289
  finally {
6248
- if (!isJokerAttempt &&
6249
- task.taskType === 'PROMPT_TASK' &&
6250
- $ongoingTaskResult.$prompt
6251
- // <- Note: [2] When some expected parameter is not defined, error will occur in templateParameters
6252
- // In that case we don’t want to make a report about it because it’s not a llm execution error
6253
- ) {
6254
- // TODO: [🧠] Maybe put other taskTypes into report
6255
- $executionReport.promptExecutions.push({
6290
+ if (!isJokerAttempt && task.taskType === 'PROMPT_TASK' && $ongoingTaskResult.$prompt) {
6291
+ // Note: [2] When some expected parameter is not defined, error will occur in templateParameters
6292
+ // In that case we don’t want to make a report about it because it’s not a llm execution error
6293
+ const executionPromptReport = {
6256
6294
  prompt: {
6257
6295
  ...$ongoingTaskResult.$prompt,
6258
6296
  // <- TODO: [🧠] How to pick everyhing except `pipelineUrl`
@@ -6261,13 +6299,20 @@
6261
6299
  error: $ongoingTaskResult.$expectError === null
6262
6300
  ? undefined
6263
6301
  : serializeError($ongoingTaskResult.$expectError),
6264
- });
6302
+ };
6303
+ $executionReport.promptExecutions.push(executionPromptReport);
6304
+ if (logLlmCall) {
6305
+ logLlmCall({
6306
+ modelName: 'model' /* <- TODO: How to get model name from the report */,
6307
+ report: executionPromptReport,
6308
+ });
6309
+ }
6265
6310
  }
6266
6311
  }
6267
6312
  if ($ongoingTaskResult.$expectError !== null && attemptIndex === maxAttempts - 1) {
6268
6313
  // Note: Create a summary of all failures
6269
6314
  const failuresSummary = $ongoingTaskResult.$failedResults
6270
- .map((failure) => spaceTrim.spaceTrim((block) => {
6315
+ .map((failure) => spaceTrim$1.spaceTrim((block) => {
6271
6316
  var _a, _b;
6272
6317
  return `
6273
6318
  Attempt ${failure.attemptIndex + 1}:
@@ -6277,14 +6322,14 @@
6277
6322
  Result:
6278
6323
  ${block(failure.result === null
6279
6324
  ? 'null'
6280
- : spaceTrim.spaceTrim(failure.result)
6325
+ : spaceTrim$1.spaceTrim(failure.result)
6281
6326
  .split('\n')
6282
6327
  .map((line) => `> ${line}`)
6283
6328
  .join('\n'))}
6284
6329
  `;
6285
6330
  }))
6286
6331
  .join('\n\n---\n\n');
6287
- throw new PipelineExecutionError(spaceTrim.spaceTrim((block) => {
6332
+ throw new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => {
6288
6333
  var _a;
6289
6334
  return `
6290
6335
  LLM execution failed ${maxExecutionAttempts}x
@@ -6304,7 +6349,7 @@
6304
6349
  }
6305
6350
  }
6306
6351
  if ($ongoingTaskResult.$resultString === null) {
6307
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6352
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6308
6353
  Something went wrong and prompt result is null
6309
6354
 
6310
6355
  ${block(pipelineIdentification)}
@@ -6326,9 +6371,9 @@
6326
6371
  * @private internal utility of `createPipelineExecutor`
6327
6372
  */
6328
6373
  async function executeFormatSubvalues(options) {
6329
- const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, pipelineIdentification } = options;
6374
+ const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, logLlmCall, pipelineIdentification, } = options;
6330
6375
  if (task.foreach === undefined) {
6331
- return /* not await */ executeAttempts(options);
6376
+ return /* not await */ executeAttempts({ ...options, logLlmCall });
6332
6377
  }
6333
6378
  if (jokerParameterNames.length !== 0) {
6334
6379
  throw new UnexpectedError(spaceTrim__default["default"]((block) => `
@@ -6534,7 +6579,7 @@
6534
6579
  },
6535
6580
  content: task.content,
6536
6581
  parameters,
6537
- };
6582
+ }; /* <- Note: [🤛] */
6538
6583
  const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
6539
6584
  const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
6540
6585
  const { index } = knowledgePiece;
@@ -6610,7 +6655,7 @@
6610
6655
  // Note: Doublecheck that ALL reserved parameters are defined:
6611
6656
  for (const parameterName of RESERVED_PARAMETER_NAMES) {
6612
6657
  if (reservedParameters[parameterName] === undefined) {
6613
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6658
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6614
6659
  Reserved parameter {${parameterName}} is not defined
6615
6660
 
6616
6661
  ${block(pipelineIdentification)}
@@ -6629,14 +6674,14 @@
6629
6674
  * @private internal utility of `createPipelineExecutor`
6630
6675
  */
6631
6676
  async function executeTask(options) {
6632
- const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
6677
+ const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, logLlmCall, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
6633
6678
  const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
6634
6679
  // Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
6635
6680
  const usedParameterNames = extractParameterNamesFromTask(currentTask);
6636
6681
  const dependentParameterNames = new Set(currentTask.dependentParameterNames);
6637
6682
  // TODO: [👩🏾‍🤝‍👩🏻] Use here `mapAvailableToExpectedParameters`
6638
6683
  if (difference(union(difference(usedParameterNames, dependentParameterNames), difference(dependentParameterNames, usedParameterNames)), new Set(RESERVED_PARAMETER_NAMES)).size !== 0) {
6639
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6684
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6640
6685
  Dependent parameters are not consistent with used parameters:
6641
6686
 
6642
6687
  Dependent parameters:
@@ -6680,7 +6725,7 @@
6680
6725
  else if (!definedParameterNames.has(parameterName) && usedParameterNames.has(parameterName)) {
6681
6726
  // Houston, we have a problem
6682
6727
  // Note: Checking part is also done in `validatePipeline`, but it’s good to doublecheck
6683
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6728
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6684
6729
  Parameter \`{${parameterName}}\` is NOT defined
6685
6730
  BUT used in task "${currentTask.title || currentTask.name}"
6686
6731
 
@@ -6708,6 +6753,7 @@
6708
6753
  tools,
6709
6754
  $executionReport,
6710
6755
  onProgress,
6756
+ logLlmCall,
6711
6757
  pipelineIdentification,
6712
6758
  maxExecutionAttempts,
6713
6759
  maxParallelCount,
@@ -6748,9 +6794,32 @@
6748
6794
  for (const parameter of preparedPipeline.parameters.filter(({ isOutput }) => isOutput)) {
6749
6795
  if (parametersToPass[parameter.name] === undefined) {
6750
6796
  // [4]
6751
- $warnings.push(new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6797
+ $warnings.push(new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6752
6798
  Parameter \`{${parameter.name}}\` should be an output parameter, but it was not generated during pipeline execution
6753
6799
 
6800
+ Note: This is a warning which happened after the pipeline was executed, and \`{${parameter.name}}\` was not for some reason defined in output parameters
6801
+
6802
+ All parameters:
6803
+ ${block(preparedPipeline.parameters
6804
+ .map(({ name, isInput, isOutput, description }) => {
6805
+ let line = `\`{${name}}\``;
6806
+ if (isInput) {
6807
+ line += ' `[input parameter]`';
6808
+ }
6809
+ if (isOutput) {
6810
+ line += ' `[output parameter]`';
6811
+ }
6812
+ if (parametersToPass[name] === undefined) {
6813
+ line += ` <- Warning: Should be in the output but its not |`;
6814
+ }
6815
+ if (description) {
6816
+ line += ` ${description}`;
6817
+ }
6818
+ return line;
6819
+ })
6820
+ .map((line, index) => `${index + 1}) ${line}`)
6821
+ .join('\n'))}
6822
+
6754
6823
  ${block(pipelineIdentification)}
6755
6824
  `)));
6756
6825
  continue;
@@ -6771,7 +6840,7 @@
6771
6840
  * @private internal utility of `createPipelineExecutor`
6772
6841
  */
6773
6842
  async function executePipeline(options) {
6774
- const { inputParameters, tools, onProgress, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
6843
+ const { inputParameters, tools, onProgress, logLlmCall, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
6775
6844
  let { preparedPipeline } = options;
6776
6845
  if (preparedPipeline === undefined) {
6777
6846
  preparedPipeline = await preparePipeline(pipeline, tools, {
@@ -6833,7 +6902,7 @@
6833
6902
  for (const parameterName of Object.keys(inputParameters)) {
6834
6903
  const parameter = preparedPipeline.parameters.find(({ name }) => name === parameterName);
6835
6904
  if (parameter === undefined) {
6836
- warnings.push(new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6905
+ warnings.push(new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6837
6906
  Extra parameter {${parameterName}} is being passed which is not part of the pipeline.
6838
6907
 
6839
6908
  ${block(pipelineIdentification)}
@@ -6848,7 +6917,7 @@
6848
6917
  // TODO: [🧠] This should be also non-critical error
6849
6918
  return exportJson({
6850
6919
  name: 'pipelineExecutorResult',
6851
- message: spaceTrim.spaceTrim((block) => `
6920
+ message: spaceTrim$1.spaceTrim((block) => `
6852
6921
  Unsuccessful PipelineExecutorResult (with extra parameter {${parameter.name}}) PipelineExecutorResult
6853
6922
 
6854
6923
  ${block(pipelineIdentification)}
@@ -6857,7 +6926,7 @@
6857
6926
  value: {
6858
6927
  isSuccessful: false,
6859
6928
  errors: [
6860
- new PipelineExecutionError(spaceTrim.spaceTrim((block) => `
6929
+ new PipelineExecutionError(spaceTrim$1.spaceTrim((block) => `
6861
6930
  Parameter \`{${parameter.name}}\` is passed as input parameter but it is not input
6862
6931
 
6863
6932
  ${block(pipelineIdentification)}
@@ -6884,7 +6953,7 @@
6884
6953
  while (unresovedTasks.length > 0) {
6885
6954
  if (loopLimit-- < 0) {
6886
6955
  // Note: Really UnexpectedError not LimitReachedError - this should be catched during validatePipeline
6887
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
6956
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6888
6957
  Loop limit reached during resolving parameters pipeline execution
6889
6958
 
6890
6959
  ${block(pipelineIdentification)}
@@ -6894,7 +6963,7 @@
6894
6963
  if (!currentTask && resolving.length === 0) {
6895
6964
  throw new UnexpectedError(
6896
6965
  // TODO: [🐎] DRY
6897
- spaceTrim.spaceTrim((block) => `
6966
+ spaceTrim$1.spaceTrim((block) => `
6898
6967
  Can not resolve some parameters:
6899
6968
 
6900
6969
  ${block(pipelineIdentification)}
@@ -6934,7 +7003,7 @@
6934
7003
  tools,
6935
7004
  onProgress(newOngoingResult) {
6936
7005
  if (isReturned) {
6937
- throw new UnexpectedError(spaceTrim.spaceTrim((block) => `
7006
+ throw new UnexpectedError(spaceTrim$1.spaceTrim((block) => `
6938
7007
  Can not call \`onProgress\` after pipeline execution is finished
6939
7008
 
6940
7009
  ${block(pipelineIdentification)}
@@ -6949,8 +7018,9 @@
6949
7018
  onProgress(newOngoingResult);
6950
7019
  }
6951
7020
  },
7021
+ logLlmCall,
6952
7022
  $executionReport: executionReport,
6953
- pipelineIdentification: spaceTrim.spaceTrim((block) => `
7023
+ pipelineIdentification: spaceTrim$1.spaceTrim((block) => `
6954
7024
  ${block(pipelineIdentification)}
6955
7025
  Task name: ${currentTask.name}
6956
7026
  Task title: ${currentTask.title}
@@ -7059,7 +7129,7 @@
7059
7129
  preparedPipeline = pipeline;
7060
7130
  }
7061
7131
  else if (isNotPreparedWarningSuppressed !== true) {
7062
- console.warn(spaceTrim.spaceTrim((block) => `
7132
+ console.warn(spaceTrim$1.spaceTrim((block) => `
7063
7133
  Pipeline is not prepared
7064
7134
 
7065
7135
  ${block(pipelineIdentification)}
@@ -7072,7 +7142,7 @@
7072
7142
  // <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
7073
7143
  }
7074
7144
  let runCount = 0;
7075
- const pipelineExecutorWithCallback = async (inputParameters, onProgress) => {
7145
+ const pipelineExecutorWithCallback = async (inputParameters, onProgress, logLlmCall) => {
7076
7146
  runCount++;
7077
7147
  return /* not await */ executePipeline({
7078
7148
  pipeline,
@@ -7083,7 +7153,8 @@
7083
7153
  inputParameters,
7084
7154
  tools,
7085
7155
  onProgress,
7086
- pipelineIdentification: spaceTrim.spaceTrim((block) => `
7156
+ logLlmCall,
7157
+ pipelineIdentification: spaceTrim$1.spaceTrim((block) => `
7087
7158
  ${block(pipelineIdentification)}
7088
7159
  ${runCount === 1 ? '' : `Run #${runCount}`}
7089
7160
  `),
@@ -7244,7 +7315,7 @@
7244
7315
  }
7245
7316
  const llmTools = getSingleLlmExecutionTools(llm);
7246
7317
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
7247
- const collection = createCollectionFromJson(...PipelineCollection);
7318
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
7248
7319
  const prepareKnowledgeFromMarkdownExecutor = createPipelineExecutor({
7249
7320
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book'),
7250
7321
  tools: {