@promptbook/pdf 0.103.0-9 → 0.103.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. package/README.md +59 -39
  2. package/esm/index.es.js +260 -171
  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 +22 -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 +70 -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 +20 -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 +6 -1
  26. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +85 -14
  27. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +18 -0
  28. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  29. package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +17 -0
  30. package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
  31. package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +16 -0
  32. package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
  33. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  34. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  35. package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
  36. package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
  37. package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
  38. package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
  39. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentIntegration.d.ts +52 -0
  40. package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgentSeamlessIntegration.d.ts +14 -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 +2 -2
  48. package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
  49. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  50. package/esm/typings/src/book-components/icons/CameraIcon.d.ts +11 -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/book-components/icons/SendIcon.d.ts +3 -0
  58. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  59. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  60. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  61. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  62. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  63. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  64. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  65. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  66. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  67. package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
  68. package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
  69. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  70. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  71. package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
  72. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
  73. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
  74. package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
  75. package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
  76. package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
  77. package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
  78. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
  79. package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
  80. package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
  81. package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
  82. package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
  83. package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
  84. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  85. package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
  86. package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +39 -0
  87. package/esm/typings/src/commitments/CLOSED/CLOSED.test.d.ts +4 -0
  88. package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
  89. package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
  90. package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
  91. package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
  92. package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
  93. package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
  94. package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
  95. package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
  96. package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
  97. package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
  98. package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
  99. package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
  100. package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
  101. package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
  102. package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
  103. package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
  104. package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
  105. package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
  106. package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
  107. package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
  108. package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
  109. package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
  110. package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
  111. package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
  112. package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
  113. package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
  114. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +42 -0
  115. package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
  116. package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
  117. package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
  118. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +14 -2
  119. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
  120. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
  121. package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
  122. package/esm/typings/src/commitments/index.d.ts +93 -0
  123. package/esm/typings/src/config.d.ts +24 -3
  124. package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
  125. package/esm/typings/src/errors/0-index.d.ts +6 -0
  126. package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
  127. package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
  128. package/esm/typings/src/errors/WrappedError.d.ts +2 -2
  129. package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
  130. package/esm/typings/src/execution/Executables.d.ts +3 -0
  131. package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
  132. package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
  133. package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
  134. package/esm/typings/src/execution/LlmExecutionTools.d.ts +26 -2
  135. package/esm/typings/src/execution/PromptResult.d.ts +7 -1
  136. package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
  137. package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
  138. package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
  139. package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
  140. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  141. package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
  142. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  143. package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
  144. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  145. package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
  146. package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
  147. package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
  148. package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
  149. package/esm/typings/src/llm-providers/agent/Agent.d.ts +72 -0
  150. package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
  151. package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
  152. package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
  153. package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
  154. package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
  155. package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
  156. package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
  157. package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
  158. package/esm/typings/src/llm-providers/ollama/OllamaExecutionTools.d.ts +4 -0
  159. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
  160. package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
  161. package/esm/typings/src/llm-providers/openai/OpenAiCompatibleExecutionTools.d.ts +13 -1
  162. package/esm/typings/src/llm-providers/openai/OpenAiExecutionTools.d.ts +4 -0
  163. package/esm/typings/src/llm-providers/openai/createOpenAiCompatibleExecutionTools.d.ts +6 -6
  164. package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
  165. package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
  166. package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
  167. package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
  168. package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
  169. package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
  170. package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
  171. package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
  172. package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
  173. package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
  174. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  175. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  176. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  177. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  178. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  179. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  180. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  181. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  182. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  183. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  184. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  185. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  186. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  187. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  188. package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
  189. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  190. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
  191. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
  192. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  193. package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
  194. package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
  195. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
  196. package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
  197. package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
  198. package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
  199. package/esm/typings/src/types/LlmCall.d.ts +20 -0
  200. package/esm/typings/src/types/ModelRequirements.d.ts +13 -1
  201. package/esm/typings/src/types/ModelVariant.d.ts +1 -1
  202. package/esm/typings/src/types/Prompt.d.ts +13 -1
  203. package/esm/typings/src/types/Updatable.d.ts +19 -0
  204. package/esm/typings/src/types/typeAliases.d.ts +38 -2
  205. package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
  206. package/esm/typings/src/utils/color/Color.d.ts +16 -1
  207. package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
  208. package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
  209. package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
  210. package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
  211. package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
  212. package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
  213. package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
  214. package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
  215. package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
  216. package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
  217. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  218. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  219. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  220. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  221. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  222. package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
  223. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
  224. package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
  225. package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
  226. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  227. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  228. package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
  229. package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
  230. package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
  231. package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
  232. package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
  233. package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
  234. package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
  235. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  236. package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
  237. package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
  238. package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
  239. package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
  240. package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +31 -0
  241. package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
  242. package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
  243. package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
  244. package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
  245. package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
  246. package/esm/typings/src/utils/random/CzechNamePool.d.ts +7 -0
  247. package/esm/typings/src/utils/random/EnglishNamePool.d.ts +7 -0
  248. package/esm/typings/src/utils/random/NamePool.d.ts +17 -0
  249. package/esm/typings/src/utils/random/getNamePool.d.ts +10 -0
  250. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  251. package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
  252. package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
  253. package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
  254. package/esm/typings/src/version.d.ts +1 -1
  255. package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
  256. package/package.json +8 -8
  257. package/umd/index.umd.js +285 -196
  258. package/umd/index.umd.js.map +1 -1
  259. package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
  260. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  261. package/esm/typings/src/book-components/BookEditor/BookEditorWrapper.d.ts +0 -9
  262. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  263. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  264. package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
  265. package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
  266. /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
  267. /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
  268. /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
  269. /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
  270. /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
  271. /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
  272. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
  273. /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
package/esm/index.es.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { mkdir, rm, readFile } from 'fs/promises';
2
- import spaceTrim, { spaceTrim as spaceTrim$1 } from 'spacetrim';
2
+ import spaceTrim$2, { spaceTrim as spaceTrim$1 } from 'spacetrim';
3
3
  import { SHA256 } from 'crypto-js';
4
4
  import hexEncoder from 'crypto-js/enc-hex';
5
5
  import { basename, join, dirname, isAbsolute } from 'path';
@@ -17,14 +17,14 @@ import { parse, unparse } from 'papaparse';
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-9';
27
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0';
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 @@ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-9';
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;
60
+
50
61
  /**
51
62
  * Just marks a place of place where should be something implemented
52
63
  * No side effects.
@@ -108,6 +119,7 @@ function take(initialValue) {
108
119
  * @public exported from `@promptbook/color`
109
120
  */
110
121
  const CSS_COLORS = {
122
+ promptbook: '#79EAFD',
111
123
  transparent: 'rgba(0,0,0,0)',
112
124
  aliceblue: '#f0f8ff',
113
125
  antiquewhite: '#faebd7',
@@ -289,9 +301,6 @@ function checkChannelValue(channelName, value) {
289
301
  throw new Error(`${channelName} channel is greater than 255, it is ${value}`);
290
302
  }
291
303
  }
292
- /**
293
- * TODO: [🧠][🚓] Is/which combination it better to use asserts/check, validate or is utility function?
294
- */
295
304
 
296
305
  /**
297
306
  * Color object represents an RGB color with alpha channel
@@ -311,21 +320,61 @@ class Color {
311
320
  * @param color
312
321
  * @returns Color object
313
322
  */
314
- static from(color) {
315
- if (color instanceof Color) {
323
+ static from(color, _isSingleValue = false) {
324
+ if (color === '') {
325
+ throw new Error(`Can not create color from empty string`);
326
+ }
327
+ else if (color instanceof Color) {
316
328
  return take(color);
317
329
  }
318
330
  else if (Color.isColor(color)) {
319
331
  return take(color);
320
332
  }
321
333
  else if (typeof color === 'string') {
322
- return Color.fromString(color);
334
+ try {
335
+ return Color.fromString(color);
336
+ }
337
+ catch (error) {
338
+ // <- Note: Can not use `assertsError(error)` here because it causes circular dependency
339
+ if (_isSingleValue) {
340
+ throw error;
341
+ }
342
+ const parts = color.split(/[\s+,;|]/);
343
+ if (parts.length > 0) {
344
+ return Color.from(parts[0].trim(), true);
345
+ }
346
+ else {
347
+ throw new Error(`Can not create color from given string "${color}"`);
348
+ }
349
+ }
323
350
  }
324
351
  else {
325
352
  console.error({ color });
326
353
  throw new Error(`Can not create color from given object`);
327
354
  }
328
355
  }
356
+ /**
357
+ * Creates a new Color instance from miscellaneous formats
358
+ * It just does not throw error when it fails, it returns PROMPTBOOK_COLOR instead
359
+ *
360
+ * @param color
361
+ * @returns Color object
362
+ */
363
+ static fromSafe(color) {
364
+ try {
365
+ return Color.from(color);
366
+ }
367
+ catch (error) {
368
+ // <- Note: Can not use `assertsError(error)` here because it causes circular dependency
369
+ console.warn(spaceTrim((block) => `
370
+ Color.fromSafe error:
371
+ ${block(error.message)}
372
+
373
+ Returning default PROMPTBOOK_COLOR.
374
+ `));
375
+ return Color.fromString('promptbook');
376
+ }
377
+ }
329
378
  /**
330
379
  * Creates a new Color instance from miscellaneous string formats
331
380
  *
@@ -393,6 +442,9 @@ class Color {
393
442
  if (hex.length === 3) {
394
443
  return Color.fromHex3(hex);
395
444
  }
445
+ if (hex.length === 4) {
446
+ return Color.fromHex4(hex);
447
+ }
396
448
  if (hex.length === 6) {
397
449
  return Color.fromHex6(hex);
398
450
  }
@@ -413,6 +465,19 @@ class Color {
413
465
  const b = parseInt(hex.substr(2, 1), 16) * 16;
414
466
  return take(new Color(r, g, b));
415
467
  }
468
+ /**
469
+ * Creates a new Color instance from color in hex format with 4 digits (with alpha channel)
470
+ *
471
+ * @param color in hex for example `09df`
472
+ * @returns Color object
473
+ */
474
+ static fromHex4(hex) {
475
+ const r = parseInt(hex.substr(0, 1), 16) * 16;
476
+ const g = parseInt(hex.substr(1, 1), 16) * 16;
477
+ const b = parseInt(hex.substr(2, 1), 16) * 16;
478
+ const a = parseInt(hex.substr(3, 1), 16) * 16;
479
+ return take(new Color(r, g, b, a));
480
+ }
416
481
  /**
417
482
  * Creates a new Color instance from color in hex format with 6 color digits (without alpha channel)
418
483
  *
@@ -603,7 +668,8 @@ class Color {
603
668
  * @returns true if the value is a valid hex color string (e.g., `#009edd`, `#fff`, etc.)
604
669
  */
605
670
  static isHexColorString(value) {
606
- return typeof value === 'string' && /^#(?:[0-9a-fA-F]{3}){1,2}$/.test(value);
671
+ return (typeof value === 'string' &&
672
+ /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value));
607
673
  }
608
674
  /**
609
675
  * Creates new Color object
@@ -718,6 +784,23 @@ class Color {
718
784
  * TODO: Maybe connect with textures
719
785
  */
720
786
 
787
+ /**
788
+ * Makes color transformer which returns a grayscale version of the color
789
+ *
790
+ * @param amount from 0 to 1
791
+ *
792
+ * @public exported from `@promptbook/color`
793
+ */
794
+ function grayscale(amount) {
795
+ return ({ red, green, blue, alpha }) => {
796
+ const average = (red + green + blue) / 3;
797
+ red = Math.round(average * amount + red * (1 - amount));
798
+ green = Math.round(average * amount + green * (1 - amount));
799
+ blue = Math.round(average * amount + blue * (1 - amount));
800
+ return Color.fromValues(red, green, blue, alpha);
801
+ };
802
+ }
803
+
721
804
  /**
722
805
  * Converts HSL values to RGB values
723
806
  *
@@ -833,102 +916,6 @@ function lighten(amount) {
833
916
  * TODO: Maybe implement by mix+hsl
834
917
  */
835
918
 
836
- /**
837
- * Calculates distance between two colors
838
- *
839
- * @param color1 first color
840
- * @param color2 second color
841
- *
842
- * Note: This function is inefficient. Use colorDistanceSquared instead if possible.
843
- *
844
- * @public exported from `@promptbook/color`
845
- */
846
- /**
847
- * Calculates distance between two colors without square root
848
- *
849
- * @param color1 first color
850
- * @param color2 second color
851
- *
852
- * @public exported from `@promptbook/color`
853
- */
854
- function colorDistanceSquared(color1, color2) {
855
- const rmean = (color1.red + color2.red) / 2;
856
- const r = color1.red - color2.red;
857
- const g = color1.green - color2.green;
858
- const b = color1.blue - color2.blue;
859
- const weightR = 2 + rmean / 256;
860
- const weightG = 4.0;
861
- const weightB = 2 + (255 - rmean) / 256;
862
- const distance = weightR * r * r + weightG * g * g + weightB * b * b;
863
- return distance;
864
- }
865
-
866
- /**
867
- * Makes color transformer which finds the nearest color from the given list
868
- *
869
- * @param colors array of colors to choose from
870
- *
871
- * @public exported from `@promptbook/color`
872
- */
873
- function nearest(...colors) {
874
- return (color) => {
875
- const distances = colors.map((c) => colorDistanceSquared(c, color));
876
- const minDistance = Math.min(...distances);
877
- const minIndex = distances.indexOf(minDistance);
878
- const nearestColor = colors[minIndex];
879
- return nearestColor;
880
- };
881
- }
882
-
883
- /**
884
- * Color transformer which returns the negative color
885
- *
886
- * @public exported from `@promptbook/color`
887
- */
888
- function negative(color) {
889
- const r = 255 - color.red;
890
- const g = 255 - color.green;
891
- const b = 255 - color.blue;
892
- return Color.fromValues(r, g, b, color.alpha);
893
- }
894
-
895
- /**
896
- * Makes color transformer which finds the furthest color from the given list
897
- *
898
- * @param colors array of colors to choose from
899
- *
900
- * @public exported from `@promptbook/color`
901
- */
902
- function furthest(...colors) {
903
- return (color) => {
904
- const furthestColor = negative(nearest(...colors.map(negative))(color));
905
- return furthestColor;
906
- };
907
- }
908
- /**
909
- * Makes color transformer which finds the best text color (black or white) for the given background color
910
- *
911
- * @public exported from `@promptbook/color`
912
- */
913
- furthest(Color.get('white'), Color.from('black'));
914
-
915
- /**
916
- * Makes color transformer which returns a grayscale version of the color
917
- *
918
- * @param amount from 0 to 1
919
- *
920
- * @public exported from `@promptbook/color`
921
- */
922
- function grayscale(amount) {
923
- return ({ red, green, blue, alpha }) => {
924
- const average = (red + green + blue) / 3;
925
- red = Math.round(average * amount + red * (1 - amount));
926
- green = Math.round(average * amount + green * (1 - amount));
927
- blue = Math.round(average * amount + blue * (1 - amount));
928
- return Color.fromValues(red, green, blue, alpha);
929
- };
930
- }
931
-
932
919
  /**
933
920
  * Makes color transformer which saturate the given color
934
921
  *
@@ -997,16 +984,32 @@ const ADMIN_GITHUB_NAME = 'hejny';
997
984
  *
998
985
  * @public exported from `@promptbook/core`
999
986
  */
1000
- const PROMPTBOOK_COLOR = Color.fromHex('#79EAFD');
1001
- // <- TODO: [🧠] Using `Color` here increases the package size approx 3kb, maybe remove it
987
+ const PROMPTBOOK_COLOR = Color.fromString('promptbook');
988
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1002
989
  /**
1003
- * Dark color of the Promptbook
990
+ * Colors for syntax highlighting in the `<BookEditor/>`
991
+ *
992
+ * TODO: [🗽] Unite branding and make single place for it
993
+ *
994
+ * @public exported from `@promptbook/core`
995
+ */
996
+ ({
997
+ TITLE: Color.fromHex('#244EA8'),
998
+ LINE: Color.fromHex('#eeeeee'),
999
+ SEPARATOR: Color.fromHex('#cccccc'),
1000
+ COMMITMENT: Color.fromHex('#DA0F78'),
1001
+ PARAMETER: Color.fromHex('#8e44ad'),
1002
+ });
1003
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1004
+ /**
1005
+ * Chat color of the Promptbook (in chat)
1004
1006
  *
1005
1007
  * TODO: [🗽] Unite branding and make single place for it
1006
1008
  *
1007
1009
  * @public exported from `@promptbook/core`
1008
1010
  */
1009
1011
  PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
1012
+ // <- TODO: [🧠][🈵] Using `Color` and `lighten`, `saturate`,... here increases the package size approx 3kb, maybe remove it
1010
1013
  /**
1011
1014
  * Color of the user (in chat)
1012
1015
  *
@@ -1015,6 +1018,7 @@ PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
1015
1018
  * @public exported from `@promptbook/core`
1016
1019
  */
1017
1020
  Color.fromHex('#1D4ED8');
1021
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1018
1022
  /**
1019
1023
  * When the title is not provided, the default title is used
1020
1024
  *
@@ -1101,7 +1105,7 @@ const DEFAULT_MAX_PARALLEL_COUNT = 5; // <- TODO: [🤹‍♂️]
1101
1105
  * @public exported from `@promptbook/core`
1102
1106
  */
1103
1107
  const DEFAULT_MAX_EXECUTION_ATTEMPTS = 7; // <- TODO: [🤹‍♂️]
1104
- // <- TODO: [🕝] Make also `BOOKS_DIRNAME_ALTERNATIVES`
1108
+ // <- TODO: [🕝] Make also `AGENTS_DIRNAME_ALTERNATIVES`
1105
1109
  // TODO: Just `.promptbook` in config, hardcode subfolders like `download-cache` or `execution-cache`
1106
1110
  /**
1107
1111
  * Where to store the temporary downloads
@@ -1204,7 +1208,7 @@ class KnowledgeScrapeError extends Error {
1204
1208
  function getErrorReportUrl(error) {
1205
1209
  const report = {
1206
1210
  title: `🐜 Error report from ${NAME}`,
1207
- body: spaceTrim((block) => `
1211
+ body: spaceTrim$2((block) => `
1208
1212
 
1209
1213
 
1210
1214
  \`${error.name || 'Error'}\` has occurred in the [${NAME}], please look into it @${ADMIN_GITHUB_NAME}.
@@ -1583,6 +1587,8 @@ function removeDiacritics(input) {
1583
1587
  /**
1584
1588
  * Converts a given text to kebab-case format.
1585
1589
  *
1590
+ * Note: [🔂] This function is idempotent.
1591
+ *
1586
1592
  * @param text The text to be converted.
1587
1593
  * @returns The kebab-case formatted string.
1588
1594
  * @example 'hello-world'
@@ -1738,6 +1744,8 @@ function removeEmojis(text) {
1738
1744
  /**
1739
1745
  * Converts a title string into a normalized name.
1740
1746
  *
1747
+ * Note: [🔂] This function is idempotent.
1748
+ *
1741
1749
  * @param value The title string to be converted to a name.
1742
1750
  * @returns A normalized name derived from the input title.
1743
1751
  * @example 'Hello World!' -> 'hello-world'
@@ -1829,7 +1837,7 @@ async function getScraperIntermediateSource(source, options) {
1829
1837
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
1830
1838
  */
1831
1839
 
1832
- 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-8",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"}];
1840
+ 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"}];
1833
1841
 
1834
1842
  /**
1835
1843
  * Checks if value is valid email
@@ -1936,6 +1944,8 @@ function isValidJsonString(value /* <- [👨‍⚖️] */) {
1936
1944
  * Function `validatePipelineString` will validate the if the string is a valid pipeline string
1937
1945
  * 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.
1938
1946
  *
1947
+ * Note: [🔂] This function is idempotent.
1948
+ *
1939
1949
  * @param {string} pipelineString the candidate for a pipeline string
1940
1950
  * @returns {PipelineString} the same string as input, but validated as valid
1941
1951
  * @throws {ParseError} if the string is not a valid pipeline string
@@ -2095,7 +2105,7 @@ function pipelineJsonToString(pipelineJson) {
2095
2105
  pipelineString += '\n\n';
2096
2106
  pipelineString += '```' + contentLanguage;
2097
2107
  pipelineString += '\n';
2098
- pipelineString += spaceTrim(content);
2108
+ pipelineString += spaceTrim$2(content);
2099
2109
  // <- TODO: [main] !!3 Escape
2100
2110
  // <- TODO: [🧠] Some clear strategy how to spaceTrim the blocks
2101
2111
  pipelineString += '\n';
@@ -2216,7 +2226,7 @@ function checkSerializableAsJson(options) {
2216
2226
  }
2217
2227
  else if (typeof value === 'object') {
2218
2228
  if (value instanceof Date) {
2219
- throw new UnexpectedError(spaceTrim((block) => `
2229
+ throw new UnexpectedError(spaceTrim$2((block) => `
2220
2230
  \`${name}\` is Date
2221
2231
 
2222
2232
  Use \`string_date_iso8601\` instead
@@ -2235,7 +2245,7 @@ function checkSerializableAsJson(options) {
2235
2245
  throw new UnexpectedError(`${name} is RegExp`);
2236
2246
  }
2237
2247
  else if (value instanceof Error) {
2238
- throw new UnexpectedError(spaceTrim((block) => `
2248
+ throw new UnexpectedError(spaceTrim$2((block) => `
2239
2249
  \`${name}\` is unserialized Error
2240
2250
 
2241
2251
  Use function \`serializeError\`
@@ -2258,7 +2268,7 @@ function checkSerializableAsJson(options) {
2258
2268
  }
2259
2269
  catch (error) {
2260
2270
  assertsError(error);
2261
- throw new UnexpectedError(spaceTrim((block) => `
2271
+ throw new UnexpectedError(spaceTrim$2((block) => `
2262
2272
  \`${name}\` is not serializable
2263
2273
 
2264
2274
  ${block(error.stack || error.message)}
@@ -2290,7 +2300,7 @@ function checkSerializableAsJson(options) {
2290
2300
  }
2291
2301
  }
2292
2302
  else {
2293
- throw new UnexpectedError(spaceTrim((block) => `
2303
+ throw new UnexpectedError(spaceTrim$2((block) => `
2294
2304
  \`${name}\` is unknown type
2295
2305
 
2296
2306
  Additional message for \`${name}\`:
@@ -2320,7 +2330,7 @@ function deepClone(objectValue) {
2320
2330
  TODO: [🧠] Is there a better implementation?
2321
2331
  > const propertyNames = Object.getOwnPropertyNames(objectValue);
2322
2332
  > for (const propertyName of propertyNames) {
2323
- > const value = (objectValue as really_any)[propertyName];
2333
+ > const value = (objectValue as chococake)[propertyName];
2324
2334
  > if (value && typeof value === 'object') {
2325
2335
  > deepClone(value);
2326
2336
  > }
@@ -2525,6 +2535,8 @@ function isValidPipelineUrl(url) {
2525
2535
  * - if it is valid json
2526
2536
  * - if it is meaningful
2527
2537
  *
2538
+ * Note: [🔂] This function is idempotent.
2539
+ *
2528
2540
  * @param pipeline valid or invalid PipelineJson
2529
2541
  * @returns the same pipeline if it is logically valid
2530
2542
  * @throws {PipelineLogicError} on logical error in the pipeline
@@ -2891,7 +2903,7 @@ function unpreparePipeline(pipeline) {
2891
2903
  * Library of pipelines that groups together pipelines for an application.
2892
2904
  * This implementation is a very thin wrapper around the Array / Map of pipelines.
2893
2905
  *
2894
- * @private internal function of `createCollectionFromJson`, use `createCollectionFromJson` instead
2906
+ * @private internal function of `createPipelineCollectionFromJson`, use `createPipelineCollectionFromJson` instead
2895
2907
  * @see https://github.com/webgptorg/pipeline#pipeline-collection
2896
2908
  */
2897
2909
  class SimplePipelineCollection {
@@ -2901,7 +2913,7 @@ class SimplePipelineCollection {
2901
2913
  * @param pipelines Array of pipeline JSON objects to include in the collection
2902
2914
  *
2903
2915
  * Note: During the construction logic of all pipelines are validated
2904
- * Note: It is not recommended to use this constructor directly, use `createCollectionFromJson` *(or other variant)* instead
2916
+ * Note: It is not recommended to use this constructor directly, use `createPipelineCollectionFromJson` *(or other variant)* instead
2905
2917
  */
2906
2918
  constructor(...pipelines) {
2907
2919
  this.collection = new Map();
@@ -2989,16 +3001,16 @@ class SimplePipelineCollection {
2989
3001
  }
2990
3002
 
2991
3003
  /**
2992
- * Creates PipelineCollection from array of PipelineJson or PipelineString
3004
+ * Creates `PipelineCollection` from array of PipelineJson or PipelineString
2993
3005
  *
2994
- * Note: Functions `collectionToJson` and `createCollectionFromJson` are complementary
3006
+ * Note: Functions `pipelineCollectionToJson` and `createPipelineCollectionFromJson` are complementary
2995
3007
  * Note: Syntax, parsing, and logic consistency checks are performed on all sources during build
2996
3008
  *
2997
3009
  * @param promptbookSources
2998
3010
  * @returns PipelineCollection
2999
3011
  * @public exported from `@promptbook/core`
3000
3012
  */
3001
- function createCollectionFromJson(...promptbooks) {
3013
+ function createPipelineCollectionFromJson(...promptbooks) {
3002
3014
  return new SimplePipelineCollection(...promptbooks);
3003
3015
  }
3004
3016
 
@@ -3023,6 +3035,7 @@ class MissingToolsError extends Error {
3023
3035
  /**
3024
3036
  * Generates random token
3025
3037
  *
3038
+ * Note: `$` is used to indicate that this function is not a pure function - it is not deterministic
3026
3039
  * Note: This function is cryptographically secure (it uses crypto.randomBytes internally)
3027
3040
  *
3028
3041
  * @private internal helper function
@@ -3032,6 +3045,7 @@ function $randomToken(randomness) {
3032
3045
  return randomBytes(randomness).toString('hex');
3033
3046
  }
3034
3047
  /**
3048
+ * TODO: [🤶] Maybe export through `@promptbook/utils` or `@promptbook/random` package
3035
3049
  * TODO: Maybe use nanoid instead https://github.com/ai/nanoid
3036
3050
  */
3037
3051
 
@@ -3150,6 +3164,22 @@ class CollectionError extends Error {
3150
3164
  }
3151
3165
  }
3152
3166
 
3167
+ /**
3168
+ * This error indicates error from the database
3169
+ *
3170
+ * @public exported from `@promptbook/core`
3171
+ */
3172
+ class DatabaseError extends Error {
3173
+ constructor(message) {
3174
+ super(message);
3175
+ this.name = 'DatabaseError';
3176
+ Object.setPrototypeOf(this, DatabaseError.prototype);
3177
+ }
3178
+ }
3179
+ /**
3180
+ * TODO: [🐱‍🚀] Explain that NotFoundError ([🐱‍🚀] and other specific errors) has priority over DatabaseError in some contexts
3181
+ */
3182
+
3153
3183
  /**
3154
3184
  * This error occurs when some expectation is not met in the execution of the pipeline
3155
3185
  *
@@ -3179,6 +3209,19 @@ class LimitReachedError extends Error {
3179
3209
  }
3180
3210
  }
3181
3211
 
3212
+ /**
3213
+ * This error indicates that promptbook operation is not allowed
3214
+ *
3215
+ * @public exported from `@promptbook/core`
3216
+ */
3217
+ class NotAllowed extends Error {
3218
+ constructor(message) {
3219
+ super(message);
3220
+ this.name = 'NotAllowed';
3221
+ Object.setPrototypeOf(this, NotAllowed.prototype);
3222
+ }
3223
+ }
3224
+
3182
3225
  /**
3183
3226
  * This error type indicates that some part of the code is not implemented yet
3184
3227
  *
@@ -3239,6 +3282,8 @@ const PROMPTBOOK_ERRORS = {
3239
3282
  PromptbookFetchError,
3240
3283
  UnexpectedError,
3241
3284
  WrappedError,
3285
+ NotAllowed,
3286
+ DatabaseError,
3242
3287
  // TODO: [🪑]> VersionMismatchError,
3243
3288
  };
3244
3289
  /**
@@ -3286,7 +3331,7 @@ function serializeError(error) {
3286
3331
  const { name, message, stack } = error;
3287
3332
  const { id } = error;
3288
3333
  if (!Object.keys(ALL_ERRORS).includes(name)) {
3289
- console.error(spaceTrim((block) => `
3334
+ console.error(spaceTrim$2((block) => `
3290
3335
 
3291
3336
  Cannot serialize error with name "${name}"
3292
3337
 
@@ -3319,7 +3364,7 @@ function jsonParse(value) {
3319
3364
  }
3320
3365
  else if (typeof value !== 'string') {
3321
3366
  console.error('Can not parse JSON from non-string value.', { text: value });
3322
- throw new Error(spaceTrim(`
3367
+ throw new Error(spaceTrim$2(`
3323
3368
  Can not parse JSON from non-string value.
3324
3369
 
3325
3370
  The value type: ${typeof value}
@@ -3333,7 +3378,7 @@ function jsonParse(value) {
3333
3378
  if (!(error instanceof Error)) {
3334
3379
  throw error;
3335
3380
  }
3336
- throw new Error(spaceTrim((block) => `
3381
+ throw new Error(spaceTrim$2((block) => `
3337
3382
  ${block(error.message)}
3338
3383
 
3339
3384
  The expected JSON text:
@@ -3386,7 +3431,7 @@ function deserializeError(error) {
3386
3431
  message = `${name}: ${message}`;
3387
3432
  }
3388
3433
  if (stack !== undefined && stack !== '') {
3389
- message = spaceTrim((block) => `
3434
+ message = spaceTrim$2((block) => `
3390
3435
  ${block(message)}
3391
3436
 
3392
3437
  Original stack trace:
@@ -3454,6 +3499,7 @@ function createTask(options) {
3454
3499
  let updatedAt = createdAt;
3455
3500
  const errors = [];
3456
3501
  const warnings = [];
3502
+ const llmCalls = [];
3457
3503
  let currentValue = {};
3458
3504
  let customTldr = null;
3459
3505
  const partialResultSubject = new Subject();
@@ -3469,6 +3515,9 @@ function createTask(options) {
3469
3515
  }, (tldrInfo) => {
3470
3516
  customTldr = tldrInfo;
3471
3517
  updatedAt = new Date();
3518
+ }, (llmCall) => {
3519
+ llmCalls.push(llmCall);
3520
+ updatedAt = new Date();
3472
3521
  });
3473
3522
  finalResultPromise
3474
3523
  .catch((error) => {
@@ -3591,7 +3640,7 @@ function createTask(options) {
3591
3640
  }
3592
3641
  return {
3593
3642
  percent: percent,
3594
- message,
3643
+ message: message + ' (!!!fallback)',
3595
3644
  };
3596
3645
  },
3597
3646
  get createdAt() {
@@ -3614,6 +3663,10 @@ function createTask(options) {
3614
3663
  return warnings;
3615
3664
  // <- Note: [1] --||--
3616
3665
  },
3666
+ get llmCalls() {
3667
+ return [...llmCalls, { foo: '!!! bar' }];
3668
+ // <- Note: [1] --||--
3669
+ },
3617
3670
  get currentValue() {
3618
3671
  return currentValue;
3619
3672
  // <- Note: [1] --||--
@@ -3890,14 +3943,14 @@ class MultipleLlmExecutionTools {
3890
3943
  if (description === undefined) {
3891
3944
  return headLine;
3892
3945
  }
3893
- return spaceTrim((block) => `
3946
+ return spaceTrim$2((block) => `
3894
3947
  ${headLine}
3895
3948
 
3896
3949
  ${ /* <- Note: Indenting the description: */block(description)}
3897
3950
  `);
3898
3951
  })
3899
3952
  .join('\n\n');
3900
- return spaceTrim((block) => `
3953
+ return spaceTrim$2((block) => `
3901
3954
  Multiple LLM Providers:
3902
3955
 
3903
3956
  ${block(innerModelsTitlesAndDescriptions)}
@@ -3988,7 +4041,7 @@ class MultipleLlmExecutionTools {
3988
4041
  // 1) OpenAI throw PipelineExecutionError: Parameter `{knowledge}` is not defined
3989
4042
  // 2) AnthropicClaude throw PipelineExecutionError: Parameter `{knowledge}` is not defined
3990
4043
  // 3) ...
3991
- spaceTrim((block) => `
4044
+ spaceTrim$2((block) => `
3992
4045
  All execution tools of ${this.title} failed:
3993
4046
 
3994
4047
  ${block(errors
@@ -4001,7 +4054,7 @@ class MultipleLlmExecutionTools {
4001
4054
  throw new PipelineExecutionError(`You have not provided any \`LlmExecutionTools\` into ${this.title}`);
4002
4055
  }
4003
4056
  else {
4004
- throw new PipelineExecutionError(spaceTrim((block) => `
4057
+ throw new PipelineExecutionError(spaceTrim$2((block) => `
4005
4058
  You have not provided any \`LlmExecutionTools\` that support model variant "${prompt.modelRequirements.modelVariant}" into ${this.title}
4006
4059
 
4007
4060
  Available \`LlmExecutionTools\`:
@@ -4034,7 +4087,7 @@ class MultipleLlmExecutionTools {
4034
4087
  */
4035
4088
  function joinLlmExecutionTools(title, ...llmExecutionTools) {
4036
4089
  if (llmExecutionTools.length === 0) {
4037
- const warningMessage = spaceTrim(`
4090
+ const warningMessage = spaceTrim$2(`
4038
4091
  You have not provided any \`LlmExecutionTools\`
4039
4092
  This means that you won't be able to execute any prompts that require large language models like GPT-4 or Anthropic's Claude.
4040
4093
 
@@ -4067,6 +4120,7 @@ function joinLlmExecutionTools(title, ...llmExecutionTools) {
4067
4120
  return new MultipleLlmExecutionTools(title || 'Multiple LLM Providers joined by `joinLlmExecutionTools`', ...llmExecutionTools);
4068
4121
  }
4069
4122
  /**
4123
+ * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4070
4124
  * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4071
4125
  */
4072
4126
 
@@ -4083,6 +4137,7 @@ function getSingleLlmExecutionTools(oneOrMoreLlmExecutionTools) {
4083
4137
  return llmTools;
4084
4138
  }
4085
4139
  /**
4140
+ * TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
4086
4141
  * TODO: [👷‍♂️] @@@ Manual about construction of llmTools
4087
4142
  */
4088
4143
 
@@ -4098,7 +4153,7 @@ async function preparePersona(personaDescription, tools, options) {
4098
4153
  throw new MissingToolsError('LLM tools are required for preparing persona');
4099
4154
  }
4100
4155
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
4101
- const collection = createCollectionFromJson(...PipelineCollection);
4156
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
4102
4157
  const preparePersonaExecutor = createPipelineExecutor({
4103
4158
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-persona.book'),
4104
4159
  tools,
@@ -4349,14 +4404,14 @@ function $registeredScrapersMessage(availableScrapers) {
4349
4404
  return { ...metadata, isMetadataAviailable, isInstalled, isAvailableInTools };
4350
4405
  });
4351
4406
  if (metadata.length === 0) {
4352
- return spaceTrim(`
4407
+ return spaceTrim$2(`
4353
4408
  **No scrapers are available**
4354
4409
 
4355
4410
  This is a unexpected behavior, you are probably using some broken version of Promptbook
4356
4411
  At least there should be available the metadata of the scrapers
4357
4412
  `);
4358
4413
  }
4359
- return spaceTrim((block) => `
4414
+ return spaceTrim$2((block) => `
4360
4415
  Available scrapers are:
4361
4416
  ${block(metadata
4362
4417
  .map(({ packageName, className, isMetadataAviailable, isInstalled, mimeTypes, isAvailableInBrowser, isAvailableInTools, }, i) => {
@@ -4467,7 +4522,7 @@ const promptbookFetch = async (urlOrRequest, init) => {
4467
4522
  else if (urlOrRequest instanceof Request) {
4468
4523
  url = urlOrRequest.url;
4469
4524
  }
4470
- throw new PromptbookFetchError(spaceTrim((block) => `
4525
+ throw new PromptbookFetchError(spaceTrim$2((block) => `
4471
4526
  Can not fetch "${url}"
4472
4527
 
4473
4528
  Fetch error:
@@ -4628,7 +4683,7 @@ async function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
4628
4683
  const fileExtension = getFileExtension(filename);
4629
4684
  const mimeType = extensionToMimeType(fileExtension || '');
4630
4685
  if (!(await isFileExisting(filename, tools.fs))) {
4631
- throw new NotFoundError(spaceTrim((block) => `
4686
+ throw new NotFoundError(spaceTrim$2((block) => `
4632
4687
  Can not make source handler for file which does not exist:
4633
4688
 
4634
4689
  File:
@@ -4721,7 +4776,7 @@ async function prepareKnowledgePieces(knowledgeSources, tools, options) {
4721
4776
  // <- TODO: [🪓] Here should be no need for spreading new array, just `partialPieces = partialPiecesUnchecked`
4722
4777
  break;
4723
4778
  }
4724
- console.warn(spaceTrim((block) => `
4779
+ console.warn(spaceTrim$2((block) => `
4725
4780
  Cannot scrape knowledge from source despite the scraper \`${scraper.metadata.className}\` supports the mime type "${sourceHandler.mimeType}".
4726
4781
 
4727
4782
  The source:
@@ -4737,7 +4792,7 @@ async function prepareKnowledgePieces(knowledgeSources, tools, options) {
4737
4792
  // <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
4738
4793
  }
4739
4794
  if (partialPieces === null) {
4740
- throw new KnowledgeScrapeError(spaceTrim((block) => `
4795
+ throw new KnowledgeScrapeError(spaceTrim$2((block) => `
4741
4796
  Cannot scrape knowledge
4742
4797
 
4743
4798
  The source:
@@ -4902,7 +4957,7 @@ async function preparePipeline(pipeline, tools, options) {
4902
4957
  let title = pipeline.title;
4903
4958
  if (title === undefined || title === '' || title === DEFAULT_BOOK_TITLE) {
4904
4959
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
4905
- const collection = createCollectionFromJson(...PipelineCollection);
4960
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
4906
4961
  const prepareTitleExecutor = createPipelineExecutor({
4907
4962
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-title.book'),
4908
4963
  tools,
@@ -5312,7 +5367,7 @@ const CsvFormatParser = {
5312
5367
  const { value, outputParameterName, settings, mapCallback, onProgress } = options;
5313
5368
  const csv = csvParse(value, settings);
5314
5369
  if (csv.errors.length !== 0) {
5315
- throw new CsvFormatError(spaceTrim((block) => `
5370
+ throw new CsvFormatError(spaceTrim$2((block) => `
5316
5371
  CSV parsing error
5317
5372
 
5318
5373
  Error(s) from CSV parsing:
@@ -5357,7 +5412,7 @@ const CsvFormatParser = {
5357
5412
  const { value, settings, mapCallback, onProgress } = options;
5358
5413
  const csv = csvParse(value, settings);
5359
5414
  if (csv.errors.length !== 0) {
5360
- throw new CsvFormatError(spaceTrim((block) => `
5415
+ throw new CsvFormatError(spaceTrim$2((block) => `
5361
5416
  CSV parsing error
5362
5417
 
5363
5418
  Error(s) from CSV parsing:
@@ -5567,7 +5622,7 @@ function mapAvailableToExpectedParameters(options) {
5567
5622
  }
5568
5623
  // Phase 2️⃣: Non-matching mapping
5569
5624
  if (expectedParameterNames.size !== availableParametersNames.size) {
5570
- throw new PipelineExecutionError(spaceTrim((block) => `
5625
+ throw new PipelineExecutionError(spaceTrim$2((block) => `
5571
5626
  Can not map available parameters to expected parameters
5572
5627
 
5573
5628
  Mapped parameters:
@@ -5814,10 +5869,13 @@ const LINES_PER_STANDARD_PAGE = 44;
5814
5869
  * @public exported from `@promptbook/utils`
5815
5870
  */
5816
5871
  function countLines(text) {
5872
+ if (text === '') {
5873
+ return 0;
5874
+ }
5817
5875
  text = text.replace('\r\n', '\n');
5818
5876
  text = text.replace('\r', '\n');
5819
5877
  const lines = text.split('\n');
5820
- return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
5878
+ return lines.reduce((count, line) => count + Math.max(Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 1), 0);
5821
5879
  }
5822
5880
  /**
5823
5881
  * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
@@ -5942,6 +6000,8 @@ function checkExpectations(expectations, value) {
5942
6000
  * This function provides a common abstraction for result validation that can be used
5943
6001
  * by both execution logic and caching logic to ensure consistency.
5944
6002
  *
6003
+ * Note: [🔂] This function is idempotent.
6004
+ *
5945
6005
  * @param options - The validation options including result string, expectations, and format
5946
6006
  * @returns Validation result with processed string and validity status
5947
6007
  * @private internal function of `createPipelineExecutor` and `cacheLlmTools`
@@ -6010,7 +6070,7 @@ function validatePromptResult(options) {
6010
6070
  */
6011
6071
  async function executeAttempts(options) {
6012
6072
  const { jokerParameterNames, priority, maxAttempts, // <- Note: [💂]
6013
- preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, } = options;
6073
+ preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, logLlmCall, } = options;
6014
6074
  const $ongoingTaskResult = {
6015
6075
  $result: null,
6016
6076
  $resultString: null,
@@ -6258,14 +6318,10 @@ async function executeAttempts(options) {
6258
6318
  });
6259
6319
  }
6260
6320
  finally {
6261
- if (!isJokerAttempt &&
6262
- task.taskType === 'PROMPT_TASK' &&
6263
- $ongoingTaskResult.$prompt
6264
- // <- Note: [2] When some expected parameter is not defined, error will occur in templateParameters
6265
- // In that case we don’t want to make a report about it because it’s not a llm execution error
6266
- ) {
6267
- // TODO: [🧠] Maybe put other taskTypes into report
6268
- $executionReport.promptExecutions.push({
6321
+ if (!isJokerAttempt && task.taskType === 'PROMPT_TASK' && $ongoingTaskResult.$prompt) {
6322
+ // Note: [2] When some expected parameter is not defined, error will occur in templateParameters
6323
+ // In that case we don’t want to make a report about it because it’s not a llm execution error
6324
+ const executionPromptReport = {
6269
6325
  prompt: {
6270
6326
  ...$ongoingTaskResult.$prompt,
6271
6327
  // <- TODO: [🧠] How to pick everyhing except `pipelineUrl`
@@ -6274,7 +6330,14 @@ async function executeAttempts(options) {
6274
6330
  error: $ongoingTaskResult.$expectError === null
6275
6331
  ? undefined
6276
6332
  : serializeError($ongoingTaskResult.$expectError),
6277
- });
6333
+ };
6334
+ $executionReport.promptExecutions.push(executionPromptReport);
6335
+ if (logLlmCall) {
6336
+ logLlmCall({
6337
+ modelName: 'model' /* <- TODO: How to get model name from the report */,
6338
+ report: executionPromptReport,
6339
+ });
6340
+ }
6278
6341
  }
6279
6342
  }
6280
6343
  if ($ongoingTaskResult.$expectError !== null && attemptIndex === maxAttempts - 1) {
@@ -6339,12 +6402,12 @@ async function executeAttempts(options) {
6339
6402
  * @private internal utility of `createPipelineExecutor`
6340
6403
  */
6341
6404
  async function executeFormatSubvalues(options) {
6342
- const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, pipelineIdentification } = options;
6405
+ const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, logLlmCall, pipelineIdentification, } = options;
6343
6406
  if (task.foreach === undefined) {
6344
- return /* not await */ executeAttempts(options);
6407
+ return /* not await */ executeAttempts({ ...options, logLlmCall });
6345
6408
  }
6346
6409
  if (jokerParameterNames.length !== 0) {
6347
- throw new UnexpectedError(spaceTrim((block) => `
6410
+ throw new UnexpectedError(spaceTrim$2((block) => `
6348
6411
  JOKER parameters are not supported together with FOREACH command
6349
6412
 
6350
6413
  [🧞‍♀️] This should be prevented in \`validatePipeline\`
@@ -6357,7 +6420,7 @@ async function executeFormatSubvalues(options) {
6357
6420
  if (formatDefinition === undefined) {
6358
6421
  throw new UnexpectedError(
6359
6422
  // <- TODO: [🧠][🧐] Should be formats fixed per promptbook version or behave as plugins (=> change UnexpectedError)
6360
- spaceTrim((block) => `
6423
+ spaceTrim$2((block) => `
6361
6424
  Unsupported format "${task.foreach.formatName}"
6362
6425
 
6363
6426
  Available formats:
@@ -6374,7 +6437,7 @@ async function executeFormatSubvalues(options) {
6374
6437
  if (subvalueParser === undefined) {
6375
6438
  throw new UnexpectedError(
6376
6439
  // <- TODO: [🧠][🧐] Should be formats fixed per promptbook version or behave as plugins (=> change UnexpectedError)
6377
- spaceTrim((block) => `
6440
+ spaceTrim$2((block) => `
6378
6441
  Unsupported subformat name "${task.foreach.subformatName}" for format "${task.foreach.formatName}"
6379
6442
 
6380
6443
  Available subformat names for format "${formatDefinition.formatName}":
@@ -6414,7 +6477,7 @@ async function executeFormatSubvalues(options) {
6414
6477
  if (!(error instanceof PipelineExecutionError)) {
6415
6478
  throw error;
6416
6479
  }
6417
- const highLevelError = new PipelineExecutionError(spaceTrim((block) => `
6480
+ const highLevelError = new PipelineExecutionError(spaceTrim$2((block) => `
6418
6481
  ${error.message}
6419
6482
 
6420
6483
  This is error in FOREACH command when mapping ${formatDefinition.formatName} ${subvalueParser.subvalueName} data (${index + 1}/${length})
@@ -6438,7 +6501,7 @@ async function executeFormatSubvalues(options) {
6438
6501
  ...options,
6439
6502
  priority: priority + index,
6440
6503
  parameters: allSubparameters,
6441
- pipelineIdentification: spaceTrim((block) => `
6504
+ pipelineIdentification: spaceTrim$2((block) => `
6442
6505
  ${block(pipelineIdentification)}
6443
6506
  Subparameter index: ${index}
6444
6507
  `),
@@ -6447,7 +6510,7 @@ async function executeFormatSubvalues(options) {
6447
6510
  }
6448
6511
  catch (error) {
6449
6512
  if (length > BIG_DATASET_TRESHOLD) {
6450
- console.error(spaceTrim((block) => `
6513
+ console.error(spaceTrim$2((block) => `
6451
6514
  ${error.message}
6452
6515
 
6453
6516
  This is error in FOREACH command when processing ${formatDefinition.formatName} ${subvalueParser.subvalueName} data (${index + 1}/${length})
@@ -6547,7 +6610,7 @@ async function getKnowledgeForTask(options) {
6547
6610
  },
6548
6611
  content: task.content,
6549
6612
  parameters,
6550
- };
6613
+ }; /* <- Note: [🤛] */
6551
6614
  const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
6552
6615
  const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
6553
6616
  const { index } = knowledgePiece;
@@ -6642,7 +6705,7 @@ async function getReservedParametersForTask(options) {
6642
6705
  * @private internal utility of `createPipelineExecutor`
6643
6706
  */
6644
6707
  async function executeTask(options) {
6645
- const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
6708
+ const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, logLlmCall, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
6646
6709
  const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
6647
6710
  // Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
6648
6711
  const usedParameterNames = extractParameterNamesFromTask(currentTask);
@@ -6721,6 +6784,7 @@ async function executeTask(options) {
6721
6784
  tools,
6722
6785
  $executionReport,
6723
6786
  onProgress,
6787
+ logLlmCall,
6724
6788
  pipelineIdentification,
6725
6789
  maxExecutionAttempts,
6726
6790
  maxParallelCount,
@@ -6764,6 +6828,29 @@ function filterJustOutputParameters(options) {
6764
6828
  $warnings.push(new PipelineExecutionError(spaceTrim$1((block) => `
6765
6829
  Parameter \`{${parameter.name}}\` should be an output parameter, but it was not generated during pipeline execution
6766
6830
 
6831
+ Note: This is a warning which happened after the pipeline was executed, and \`{${parameter.name}}\` was not for some reason defined in output parameters
6832
+
6833
+ All parameters:
6834
+ ${block(preparedPipeline.parameters
6835
+ .map(({ name, isInput, isOutput, description }) => {
6836
+ let line = `\`{${name}}\``;
6837
+ if (isInput) {
6838
+ line += ' `[input parameter]`';
6839
+ }
6840
+ if (isOutput) {
6841
+ line += ' `[output parameter]`';
6842
+ }
6843
+ if (parametersToPass[name] === undefined) {
6844
+ line += ` <- Warning: Should be in the output but its not |`;
6845
+ }
6846
+ if (description) {
6847
+ line += ` ${description}`;
6848
+ }
6849
+ return line;
6850
+ })
6851
+ .map((line, index) => `${index + 1}) ${line}`)
6852
+ .join('\n'))}
6853
+
6767
6854
  ${block(pipelineIdentification)}
6768
6855
  `)));
6769
6856
  continue;
@@ -6784,7 +6871,7 @@ function filterJustOutputParameters(options) {
6784
6871
  * @private internal utility of `createPipelineExecutor`
6785
6872
  */
6786
6873
  async function executePipeline(options) {
6787
- const { inputParameters, tools, onProgress, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
6874
+ const { inputParameters, tools, onProgress, logLlmCall, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
6788
6875
  let { preparedPipeline } = options;
6789
6876
  if (preparedPipeline === undefined) {
6790
6877
  preparedPipeline = await preparePipeline(pipeline, tools, {
@@ -6962,6 +7049,7 @@ async function executePipeline(options) {
6962
7049
  onProgress(newOngoingResult);
6963
7050
  }
6964
7051
  },
7052
+ logLlmCall,
6965
7053
  $executionReport: executionReport,
6966
7054
  pipelineIdentification: spaceTrim$1((block) => `
6967
7055
  ${block(pipelineIdentification)}
@@ -7085,7 +7173,7 @@ function createPipelineExecutor(options) {
7085
7173
  // <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
7086
7174
  }
7087
7175
  let runCount = 0;
7088
- const pipelineExecutorWithCallback = async (inputParameters, onProgress) => {
7176
+ const pipelineExecutorWithCallback = async (inputParameters, onProgress, logLlmCall) => {
7089
7177
  runCount++;
7090
7178
  return /* not await */ executePipeline({
7091
7179
  pipeline,
@@ -7096,6 +7184,7 @@ function createPipelineExecutor(options) {
7096
7184
  inputParameters,
7097
7185
  tools,
7098
7186
  onProgress,
7187
+ logLlmCall,
7099
7188
  pipelineIdentification: spaceTrim$1((block) => `
7100
7189
  ${block(pipelineIdentification)}
7101
7190
  ${runCount === 1 ? '' : `Run #${runCount}`}
@@ -7257,7 +7346,7 @@ class MarkdownScraper {
7257
7346
  }
7258
7347
  const llmTools = getSingleLlmExecutionTools(llm);
7259
7348
  // TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
7260
- const collection = createCollectionFromJson(...PipelineCollection);
7349
+ const collection = createPipelineCollectionFromJson(...PipelineCollection);
7261
7350
  const prepareKnowledgeFromMarkdownExecutor = createPipelineExecutor({
7262
7351
  pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book'),
7263
7352
  tools: {
@@ -7293,8 +7382,8 @@ class MarkdownScraper {
7293
7382
  knowledgeTextPieces.map(async (knowledgeTextPiece, i) => {
7294
7383
  // Note: These are just default values, they will be overwritten by the actual values:
7295
7384
  let name = `piece-${i}`;
7296
- let title = spaceTrim(knowledgeTextPiece.substring(0, 100));
7297
- const knowledgePieceContent = spaceTrim(knowledgeTextPiece);
7385
+ let title = spaceTrim$2(knowledgeTextPiece.substring(0, 100));
7386
+ const knowledgePieceContent = spaceTrim$2(knowledgeTextPiece);
7298
7387
  let keywords = [];
7299
7388
  const index = [];
7300
7389
  /*
@@ -7307,7 +7396,7 @@ class MarkdownScraper {
7307
7396
  isCrashedOnError: true,
7308
7397
  });
7309
7398
  const { title: titleRaw = 'Untitled' } = titleResult.outputParameters;
7310
- title = spaceTrim(titleRaw) /* <- TODO: Maybe do in pipeline */;
7399
+ title = spaceTrim$2(titleRaw) /* <- TODO: Maybe do in pipeline */;
7311
7400
  name = titleToName(title);
7312
7401
  // --- Keywords
7313
7402
  const keywordsResult = await prepareKeywordsExecutor({ knowledgePieceContent }).asPromise({