@promptbook/markitdown 0.103.0-10 → 0.103.0-100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -35
- package/esm/index.es.js +239 -168
- package/esm/index.es.js.map +1 -1
- package/esm/typings/books/index.d.ts +0 -81
- package/esm/typings/servers.d.ts +9 -7
- package/esm/typings/src/_packages/browser.index.d.ts +6 -0
- package/esm/typings/src/_packages/cli.index.d.ts +4 -0
- package/esm/typings/src/_packages/components.index.d.ts +20 -8
- package/esm/typings/src/_packages/core.index.d.ts +58 -18
- package/esm/typings/src/_packages/node.index.d.ts +2 -2
- package/esm/typings/src/_packages/remote-server.index.d.ts +2 -0
- package/esm/typings/src/_packages/types.index.d.ts +58 -8
- package/esm/typings/src/_packages/utils.index.d.ts +6 -0
- package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
- package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +19 -5
- package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +17 -1
- package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
- package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +3 -3
- package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
- package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +18 -0
- package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
- package/esm/typings/src/book-2.0/agent-source/string_book.d.ts +3 -0
- package/esm/typings/src/book-components/AvatarProfile/AvatarProfile/AvatarProfile.d.ts +6 -1
- package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +77 -7
- package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +14 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
- package/esm/typings/src/book-components/Chat/Chat/ChatProps.d.ts +10 -0
- package/esm/typings/src/book-components/Chat/LlmChat/LlmChatProps.d.ts +5 -0
- package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
- package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
- package/esm/typings/src/book-components/Chat/save/_common/ChatSaveFormatDefinition.d.ts +1 -1
- package/esm/typings/src/book-components/Chat/save/html/htmlSaveFormatDefinition.d.ts +1 -0
- package/esm/typings/src/book-components/Chat/save/pdf/pdfSaveFormatDefinition.d.ts +4 -0
- package/esm/typings/src/book-components/Chat/types/ChatParticipant.d.ts +1 -1
- package/esm/typings/src/book-components/PromptbookAgent/PromptbookAgent.d.ts +29 -0
- package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
- package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
- package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
- package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
- package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
- package/esm/typings/src/book-components/_common/HamburgerMenu/HamburgerMenu.d.ts +12 -0
- package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +2 -2
- package/esm/typings/src/book-components/_common/Tooltip/Tooltip.d.ts +47 -0
- package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
- package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
- package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
- package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
- package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
- package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
- package/esm/typings/src/book-components/icons/MicIcon.d.ts +8 -0
- package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
- package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
- package/esm/typings/src/cli/cli-commands/{start-server.d.ts → start-agents-server.d.ts} +3 -2
- package/esm/typings/src/cli/cli-commands/start-pipelines-server.d.ts +15 -0
- package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
- package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
- package/esm/typings/src/collection/agent-collection/AgentCollection.d.ts +12 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +75 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabaseOptions.d.ts +10 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +154 -0
- package/esm/typings/src/collection/{PipelineCollection.d.ts → pipeline-collection/PipelineCollection.d.ts} +7 -3
- package/esm/typings/src/collection/{SimplePipelineCollection.d.ts → pipeline-collection/SimplePipelineCollection.d.ts} +5 -5
- package/esm/typings/src/collection/{constructors/createCollectionFromDirectory.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.d.ts} +8 -11
- package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromJson.d.ts +13 -0
- package/esm/typings/src/collection/{constructors/createCollectionFromPromise.d.ts → pipeline-collection/constructors/createPipelineCollectionFromPromise.d.ts} +6 -5
- package/esm/typings/src/collection/pipeline-collection/constructors/createPipelineCollectionFromPromise.test.d.ts +1 -0
- package/esm/typings/src/collection/{constructors/createCollectionFromUrl.d.ts → pipeline-collection/constructors/createPipelineCollectionFromUrl.d.ts} +3 -3
- package/esm/typings/src/collection/{constructors/createSubcollection.d.ts → pipeline-collection/constructors/createPipelineSubcollection.d.ts} +3 -3
- package/esm/typings/src/collection/pipeline-collection/pipelineCollectionToJson.d.ts +13 -0
- package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
- package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +5 -1
- package/esm/typings/src/commitments/CLOSED/CLOSED.d.ts +35 -0
- package/esm/typings/src/commitments/COMPONENT/COMPONENT.d.ts +28 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +5 -1
- package/esm/typings/src/commitments/FROM/FROM.d.ts +34 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +5 -5
- package/esm/typings/src/commitments/LANGUAGE/LANGUAGE.d.ts +35 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +5 -1
- package/esm/typings/src/commitments/MESSAGE/AgentMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/commitments/MESSAGE/InitialMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +5 -1
- package/esm/typings/src/commitments/MESSAGE/UserMessageCommitmentDefinition.d.ts +32 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +5 -1
- package/esm/typings/src/commitments/META_COLOR/META_COLOR.d.ts +48 -0
- package/esm/typings/src/commitments/META_FONT/META_FONT.d.ts +42 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +5 -1
- package/esm/typings/src/commitments/OPEN/OPEN.d.ts +35 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +5 -1
- package/esm/typings/src/commitments/USE/USE.d.ts +53 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.d.ts +38 -0
- package/esm/typings/src/commitments/USE_BROWSER/USE_BROWSER.test.d.ts +1 -0
- package/esm/typings/src/commitments/USE_MCP/USE_MCP.d.ts +37 -0
- package/esm/typings/src/commitments/USE_SEARCH_ENGINE/USE_SEARCH_ENGINE.d.ts +38 -0
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +8 -2
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +6 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +5 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
- package/esm/typings/src/commitments/index.d.ts +93 -0
- package/esm/typings/src/config.d.ts +24 -3
- package/esm/typings/src/conversion/validation/validatePipeline.d.ts +2 -0
- package/esm/typings/src/errors/0-index.d.ts +6 -0
- package/esm/typings/src/errors/DatabaseError.d.ts +12 -0
- package/esm/typings/src/errors/NotAllowed.d.ts +9 -0
- package/esm/typings/src/errors/WrappedError.d.ts +2 -2
- package/esm/typings/src/execution/AvailableModel.d.ts +1 -0
- package/esm/typings/src/execution/Executables.d.ts +3 -0
- package/esm/typings/src/execution/ExecutionTask.d.ts +12 -3
- package/esm/typings/src/execution/ExecutionTools.d.ts +5 -0
- package/esm/typings/src/execution/FilesystemTools.d.ts +1 -1
- package/esm/typings/src/execution/LlmExecutionTools.d.ts +21 -1
- package/esm/typings/src/execution/createPipelineExecutor/10-executePipeline.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/20-executeTask.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/30-executeFormatSubvalues.d.ts +5 -0
- package/esm/typings/src/execution/createPipelineExecutor/40-executeAttempts.d.ts +5 -0
- package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
- package/esm/typings/src/execution/utils/validatePromptResult.d.ts +2 -0
- package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
- package/esm/typings/src/llm-providers/_common/register/$provideLlmToolsForWizardOrCli.d.ts +2 -2
- package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
- package/esm/typings/src/llm-providers/_common/register/LlmToolsMetadata.d.ts +1 -1
- package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
- package/esm/typings/src/llm-providers/_multiple/getSingleLlmExecutionTools.d.ts +1 -0
- package/esm/typings/src/llm-providers/_multiple/joinLlmExecutionTools.d.ts +1 -0
- package/esm/typings/src/llm-providers/agent/Agent.d.ts +70 -0
- package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +26 -4
- package/esm/typings/src/llm-providers/agent/AgentOptions.d.ts +19 -0
- package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +17 -0
- package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +50 -0
- package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
- package/esm/typings/src/llm-providers/agent/createAgentLlmExecutionTools.d.ts +1 -19
- package/esm/typings/src/llm-providers/anthropic-claude/anthropic-claude-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/google/google-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +60 -2
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionToolsOptions.d.ts +7 -1
- package/esm/typings/src/llm-providers/openai/openai-models.d.ts +1 -1
- package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
- package/esm/typings/src/other/templates/getTemplatesPipelineCollection.d.ts +1 -1
- package/esm/typings/src/pipeline/validatePipelineString.d.ts +2 -0
- package/esm/typings/src/playground/permanent/_boilerplate.d.ts +5 -0
- package/esm/typings/src/playground/permanent/agent-with-browser-playground.d.ts +5 -0
- package/esm/typings/src/prepare/PrepareAndScrapeOptions.d.ts +1 -0
- package/esm/typings/src/remote-server/startAgentServer.d.ts +26 -0
- package/esm/typings/src/remote-server/startRemoteServer.d.ts +4 -1
- package/esm/typings/src/remote-server/types/RemoteServerOptions.d.ts +3 -8
- package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
- package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
- package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
- package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
- package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
- package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +33 -0
- package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +18 -0
- package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
- package/esm/typings/src/transpilers/formatted-book-in-markdown/FormattedBookInMarkdownTranspiler.d.ts +16 -0
- package/esm/typings/src/transpilers/formatted-book-in-markdown/register.d.ts +15 -0
- package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.d.ts +16 -0
- package/esm/typings/src/transpilers/openai-sdk/OpenAiSdkTranspiler.test.d.ts +1 -0
- package/esm/typings/src/transpilers/openai-sdk/playground/playground.d.ts +5 -0
- package/esm/typings/src/transpilers/openai-sdk/register.d.ts +15 -0
- package/esm/typings/src/types/LlmCall.d.ts +20 -0
- package/esm/typings/src/types/Updatable.d.ts +19 -0
- package/esm/typings/src/types/typeAliases.d.ts +32 -2
- package/esm/typings/src/utils/color/$randomColor.d.ts +1 -0
- package/esm/typings/src/utils/color/Color.d.ts +15 -0
- package/esm/typings/src/utils/color/Color.test.d.ts +1 -0
- package/esm/typings/src/utils/color/css-colors.d.ts +1 -0
- package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
- package/esm/typings/src/utils/color/operators/darken.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/grayscale.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/lighten.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/mixWithColor.d.ts +1 -1
- package/esm/typings/src/utils/color/operators/saturate.d.ts +1 -1
- package/esm/typings/src/utils/environment/$detectRuntimeEnvironment.d.ts +16 -0
- package/esm/typings/src/utils/environment/$getGlobalScope.d.ts +2 -2
- package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
- package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
- package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
- package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
- package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
- package/esm/typings/src/utils/files/listAllFiles.d.ts +2 -3
- package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +27 -0
- package/esm/typings/src/utils/misc/computeHash.d.ts +11 -0
- package/esm/typings/src/utils/misc/computeHash.test.d.ts +1 -0
- package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
- package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
- package/esm/typings/src/utils/normalization/normalizeMessageText.d.ts +9 -0
- package/esm/typings/src/utils/normalization/normalizeMessageText.test.d.ts +1 -0
- package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
- package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
- package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
- package/esm/typings/src/utils/organization/$sideEffect.d.ts +2 -2
- package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
- package/esm/typings/src/utils/organization/TODO_USE.d.ts +2 -2
- package/esm/typings/src/utils/organization/keepUnused.d.ts +2 -2
- package/esm/typings/src/utils/organization/preserve.d.ts +3 -3
- package/esm/typings/src/utils/organization/really_any.d.ts +7 -0
- package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +25 -0
- package/esm/typings/src/utils/random/$randomAgentPersona.d.ts +9 -0
- package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +13 -0
- package/esm/typings/src/utils/random/$randomItem.d.ts +9 -0
- package/esm/typings/src/utils/random/$randomSeed.d.ts +3 -0
- package/esm/typings/src/utils/random/$randomToken.d.ts +2 -0
- package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
- package/esm/typings/src/utils/serialization/asSerializable.d.ts +2 -2
- package/esm/typings/src/utils/serialization/serializeToPromptbookJavascript.d.ts +2 -2
- package/esm/typings/src/utils/validators/parameterName/validateParameterName.d.ts +2 -0
- package/esm/typings/src/version.d.ts +1 -1
- package/esm/typings/src/wizard/$getCompiledBook.d.ts +1 -2
- package/package.json +7 -7
- package/umd/index.umd.js +264 -193
- package/umd/index.umd.js.map +1 -1
- package/esm/typings/src/book-2.0/commitments/index.d.ts +0 -60
- package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -11
- package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
- package/esm/typings/src/collection/collectionToJson.d.ts +0 -13
- package/esm/typings/src/collection/constructors/createCollectionFromJson.d.ts +0 -13
- /package/esm/typings/src/{book-components/Chat/utils/renderMarkdown.test.d.ts → book-2.0/agent-source/computeAgentHash.test.d.ts} +0 -0
- /package/esm/typings/src/{collection/constructors/createCollectionFromDirectory.test.d.ts → book-2.0/agent-source/normalizeAgentName.test.d.ts} +0 -0
- /package/esm/typings/src/{collection/constructors/createCollectionFromJson.test.d.ts → book-components/Chat/AgentChat/AgentChat.test.d.ts} +0 -0
- /package/esm/typings/src/collection/{constructors/createCollectionFromPromise.test.d.ts → pipeline-collection/constructors/createPipelineCollectionFromDirectory.test.d.ts} +0 -0
- /package/esm/typings/src/{commands/_common/parseCommand.test.d.ts → collection/pipeline-collection/constructors/createPipelineCollectionFromJson.test.d.ts} +0 -0
- /package/esm/typings/src/collection/{collectionToJson.test.d.ts → pipeline-collection/pipelineCollectionToJson.test.d.ts} +0 -0
- /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
- /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 = '
|
|
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-
|
|
27
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.103.0-100';
|
|
28
28
|
/**
|
|
29
29
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
30
30
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -47,6 +47,17 @@ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-10';
|
|
|
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
|
* @private util of `@promptbook/color`
|
|
52
63
|
* @de
|
|
@@ -95,6 +106,7 @@ function take(initialValue) {
|
|
|
95
106
|
* @public exported from `@promptbook/color`
|
|
96
107
|
*/
|
|
97
108
|
const CSS_COLORS = {
|
|
109
|
+
promptbook: '#79EAFD',
|
|
98
110
|
transparent: 'rgba(0,0,0,0)',
|
|
99
111
|
aliceblue: '#f0f8ff',
|
|
100
112
|
antiquewhite: '#faebd7',
|
|
@@ -276,9 +288,6 @@ function checkChannelValue(channelName, value) {
|
|
|
276
288
|
throw new Error(`${channelName} channel is greater than 255, it is ${value}`);
|
|
277
289
|
}
|
|
278
290
|
}
|
|
279
|
-
/**
|
|
280
|
-
* TODO: [🧠][🚓] Is/which combination it better to use asserts/check, validate or is utility function?
|
|
281
|
-
*/
|
|
282
291
|
|
|
283
292
|
/**
|
|
284
293
|
* Color object represents an RGB color with alpha channel
|
|
@@ -313,6 +322,28 @@ class Color {
|
|
|
313
322
|
throw new Error(`Can not create color from given object`);
|
|
314
323
|
}
|
|
315
324
|
}
|
|
325
|
+
/**
|
|
326
|
+
* Creates a new Color instance from miscellaneous formats
|
|
327
|
+
* It just does not throw error when it fails, it returns PROMPTBOOK_COLOR instead
|
|
328
|
+
*
|
|
329
|
+
* @param color
|
|
330
|
+
* @returns Color object
|
|
331
|
+
*/
|
|
332
|
+
static fromSafe(color) {
|
|
333
|
+
try {
|
|
334
|
+
return Color.from(color);
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
// <- Note: Can not use `assertsError(error)` here because it causes circular dependency
|
|
338
|
+
console.warn(spaceTrim((block) => `
|
|
339
|
+
Color.fromSafe error:
|
|
340
|
+
${block(error.message)}
|
|
341
|
+
|
|
342
|
+
Returning default PROMPTBOOK_COLOR.
|
|
343
|
+
`));
|
|
344
|
+
return Color.fromString('promptbook');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
316
347
|
/**
|
|
317
348
|
* Creates a new Color instance from miscellaneous string formats
|
|
318
349
|
*
|
|
@@ -380,6 +411,9 @@ class Color {
|
|
|
380
411
|
if (hex.length === 3) {
|
|
381
412
|
return Color.fromHex3(hex);
|
|
382
413
|
}
|
|
414
|
+
if (hex.length === 4) {
|
|
415
|
+
return Color.fromHex4(hex);
|
|
416
|
+
}
|
|
383
417
|
if (hex.length === 6) {
|
|
384
418
|
return Color.fromHex6(hex);
|
|
385
419
|
}
|
|
@@ -400,6 +434,19 @@ class Color {
|
|
|
400
434
|
const b = parseInt(hex.substr(2, 1), 16) * 16;
|
|
401
435
|
return take(new Color(r, g, b));
|
|
402
436
|
}
|
|
437
|
+
/**
|
|
438
|
+
* Creates a new Color instance from color in hex format with 4 digits (with alpha channel)
|
|
439
|
+
*
|
|
440
|
+
* @param color in hex for example `09df`
|
|
441
|
+
* @returns Color object
|
|
442
|
+
*/
|
|
443
|
+
static fromHex4(hex) {
|
|
444
|
+
const r = parseInt(hex.substr(0, 1), 16) * 16;
|
|
445
|
+
const g = parseInt(hex.substr(1, 1), 16) * 16;
|
|
446
|
+
const b = parseInt(hex.substr(2, 1), 16) * 16;
|
|
447
|
+
const a = parseInt(hex.substr(3, 1), 16) * 16;
|
|
448
|
+
return take(new Color(r, g, b, a));
|
|
449
|
+
}
|
|
403
450
|
/**
|
|
404
451
|
* Creates a new Color instance from color in hex format with 6 color digits (without alpha channel)
|
|
405
452
|
*
|
|
@@ -590,7 +637,8 @@ class Color {
|
|
|
590
637
|
* @returns true if the value is a valid hex color string (e.g., `#009edd`, `#fff`, etc.)
|
|
591
638
|
*/
|
|
592
639
|
static isHexColorString(value) {
|
|
593
|
-
return typeof value === 'string' &&
|
|
640
|
+
return (typeof value === 'string' &&
|
|
641
|
+
/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(value));
|
|
594
642
|
}
|
|
595
643
|
/**
|
|
596
644
|
* Creates new Color object
|
|
@@ -705,6 +753,23 @@ class Color {
|
|
|
705
753
|
* TODO: Maybe connect with textures
|
|
706
754
|
*/
|
|
707
755
|
|
|
756
|
+
/**
|
|
757
|
+
* Makes color transformer which returns a grayscale version of the color
|
|
758
|
+
*
|
|
759
|
+
* @param amount from 0 to 1
|
|
760
|
+
*
|
|
761
|
+
* @public exported from `@promptbook/color`
|
|
762
|
+
*/
|
|
763
|
+
function grayscale(amount) {
|
|
764
|
+
return ({ red, green, blue, alpha }) => {
|
|
765
|
+
const average = (red + green + blue) / 3;
|
|
766
|
+
red = Math.round(average * amount + red * (1 - amount));
|
|
767
|
+
green = Math.round(average * amount + green * (1 - amount));
|
|
768
|
+
blue = Math.round(average * amount + blue * (1 - amount));
|
|
769
|
+
return Color.fromValues(red, green, blue, alpha);
|
|
770
|
+
};
|
|
771
|
+
}
|
|
772
|
+
|
|
708
773
|
/**
|
|
709
774
|
* Converts HSL values to RGB values
|
|
710
775
|
*
|
|
@@ -820,102 +885,6 @@ function lighten(amount) {
|
|
|
820
885
|
* TODO: Maybe implement by mix+hsl
|
|
821
886
|
*/
|
|
822
887
|
|
|
823
|
-
/**
|
|
824
|
-
* Calculates distance between two colors
|
|
825
|
-
*
|
|
826
|
-
* @param color1 first color
|
|
827
|
-
* @param color2 second color
|
|
828
|
-
*
|
|
829
|
-
* Note: This function is inefficient. Use colorDistanceSquared instead if possible.
|
|
830
|
-
*
|
|
831
|
-
* @public exported from `@promptbook/color`
|
|
832
|
-
*/
|
|
833
|
-
/**
|
|
834
|
-
* Calculates distance between two colors without square root
|
|
835
|
-
*
|
|
836
|
-
* @param color1 first color
|
|
837
|
-
* @param color2 second color
|
|
838
|
-
*
|
|
839
|
-
* @public exported from `@promptbook/color`
|
|
840
|
-
*/
|
|
841
|
-
function colorDistanceSquared(color1, color2) {
|
|
842
|
-
const rmean = (color1.red + color2.red) / 2;
|
|
843
|
-
const r = color1.red - color2.red;
|
|
844
|
-
const g = color1.green - color2.green;
|
|
845
|
-
const b = color1.blue - color2.blue;
|
|
846
|
-
const weightR = 2 + rmean / 256;
|
|
847
|
-
const weightG = 4.0;
|
|
848
|
-
const weightB = 2 + (255 - rmean) / 256;
|
|
849
|
-
const distance = weightR * r * r + weightG * g * g + weightB * b * b;
|
|
850
|
-
return distance;
|
|
851
|
-
}
|
|
852
|
-
|
|
853
|
-
/**
|
|
854
|
-
* Makes color transformer which finds the nearest color from the given list
|
|
855
|
-
*
|
|
856
|
-
* @param colors array of colors to choose from
|
|
857
|
-
*
|
|
858
|
-
* @public exported from `@promptbook/color`
|
|
859
|
-
*/
|
|
860
|
-
function nearest(...colors) {
|
|
861
|
-
return (color) => {
|
|
862
|
-
const distances = colors.map((c) => colorDistanceSquared(c, color));
|
|
863
|
-
const minDistance = Math.min(...distances);
|
|
864
|
-
const minIndex = distances.indexOf(minDistance);
|
|
865
|
-
const nearestColor = colors[minIndex];
|
|
866
|
-
return nearestColor;
|
|
867
|
-
};
|
|
868
|
-
}
|
|
869
|
-
|
|
870
|
-
/**
|
|
871
|
-
* Color transformer which returns the negative color
|
|
872
|
-
*
|
|
873
|
-
* @public exported from `@promptbook/color`
|
|
874
|
-
*/
|
|
875
|
-
function negative(color) {
|
|
876
|
-
const r = 255 - color.red;
|
|
877
|
-
const g = 255 - color.green;
|
|
878
|
-
const b = 255 - color.blue;
|
|
879
|
-
return Color.fromValues(r, g, b, color.alpha);
|
|
880
|
-
}
|
|
881
|
-
|
|
882
|
-
/**
|
|
883
|
-
* Makes color transformer which finds the furthest color from the given list
|
|
884
|
-
*
|
|
885
|
-
* @param colors array of colors to choose from
|
|
886
|
-
*
|
|
887
|
-
* @public exported from `@promptbook/color`
|
|
888
|
-
*/
|
|
889
|
-
function furthest(...colors) {
|
|
890
|
-
return (color) => {
|
|
891
|
-
const furthestColor = negative(nearest(...colors.map(negative))(color));
|
|
892
|
-
return furthestColor;
|
|
893
|
-
};
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* Makes color transformer which finds the best text color (black or white) for the given background color
|
|
897
|
-
*
|
|
898
|
-
* @public exported from `@promptbook/color`
|
|
899
|
-
*/
|
|
900
|
-
furthest(Color.get('white'), Color.from('black'));
|
|
901
|
-
|
|
902
|
-
/**
|
|
903
|
-
* Makes color transformer which returns a grayscale version of the color
|
|
904
|
-
*
|
|
905
|
-
* @param amount from 0 to 1
|
|
906
|
-
*
|
|
907
|
-
* @public exported from `@promptbook/color`
|
|
908
|
-
*/
|
|
909
|
-
function grayscale(amount) {
|
|
910
|
-
return ({ red, green, blue, alpha }) => {
|
|
911
|
-
const average = (red + green + blue) / 3;
|
|
912
|
-
red = Math.round(average * amount + red * (1 - amount));
|
|
913
|
-
green = Math.round(average * amount + green * (1 - amount));
|
|
914
|
-
blue = Math.round(average * amount + blue * (1 - amount));
|
|
915
|
-
return Color.fromValues(red, green, blue, alpha);
|
|
916
|
-
};
|
|
917
|
-
}
|
|
918
|
-
|
|
919
888
|
/**
|
|
920
889
|
* Makes color transformer which saturate the given color
|
|
921
890
|
*
|
|
@@ -984,16 +953,32 @@ const ADMIN_GITHUB_NAME = 'hejny';
|
|
|
984
953
|
*
|
|
985
954
|
* @public exported from `@promptbook/core`
|
|
986
955
|
*/
|
|
987
|
-
const PROMPTBOOK_COLOR = Color.
|
|
988
|
-
// <- TODO: [🧠] Using `Color` here increases the package size approx 3kb, maybe remove it
|
|
956
|
+
const PROMPTBOOK_COLOR = Color.fromString('promptbook');
|
|
957
|
+
// <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
|
|
958
|
+
/**
|
|
959
|
+
* Colors for syntax highlighting in the `<BookEditor/>`
|
|
960
|
+
*
|
|
961
|
+
* TODO: [🗽] Unite branding and make single place for it
|
|
962
|
+
*
|
|
963
|
+
* @public exported from `@promptbook/core`
|
|
964
|
+
*/
|
|
965
|
+
({
|
|
966
|
+
TITLE: Color.fromHex('#244EA8'),
|
|
967
|
+
LINE: Color.fromHex('#eeeeee'),
|
|
968
|
+
SEPARATOR: Color.fromHex('#cccccc'),
|
|
969
|
+
COMMITMENT: Color.fromHex('#DA0F78'),
|
|
970
|
+
PARAMETER: Color.fromHex('#8e44ad'),
|
|
971
|
+
});
|
|
972
|
+
// <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
|
|
989
973
|
/**
|
|
990
|
-
*
|
|
974
|
+
* Chat color of the Promptbook (in chat)
|
|
991
975
|
*
|
|
992
976
|
* TODO: [🗽] Unite branding and make single place for it
|
|
993
977
|
*
|
|
994
978
|
* @public exported from `@promptbook/core`
|
|
995
979
|
*/
|
|
996
980
|
PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
|
|
981
|
+
// <- TODO: [🧠][🈵] Using `Color` and `lighten`, `saturate`,... here increases the package size approx 3kb, maybe remove it
|
|
997
982
|
/**
|
|
998
983
|
* Color of the user (in chat)
|
|
999
984
|
*
|
|
@@ -1002,6 +987,7 @@ PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
|
|
|
1002
987
|
* @public exported from `@promptbook/core`
|
|
1003
988
|
*/
|
|
1004
989
|
Color.fromHex('#1D4ED8');
|
|
990
|
+
// <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
|
|
1005
991
|
/**
|
|
1006
992
|
* When the title is not provided, the default title is used
|
|
1007
993
|
*
|
|
@@ -1088,7 +1074,7 @@ const DEFAULT_MAX_PARALLEL_COUNT = 5; // <- TODO: [🤹♂️]
|
|
|
1088
1074
|
* @public exported from `@promptbook/core`
|
|
1089
1075
|
*/
|
|
1090
1076
|
const DEFAULT_MAX_EXECUTION_ATTEMPTS = 7; // <- TODO: [🤹♂️]
|
|
1091
|
-
// <- TODO: [🕝] Make also `
|
|
1077
|
+
// <- TODO: [🕝] Make also `AGENTS_DIRNAME_ALTERNATIVES`
|
|
1092
1078
|
// TODO: Just `.promptbook` in config, hardcode subfolders like `download-cache` or `execution-cache`
|
|
1093
1079
|
/**
|
|
1094
1080
|
* Where to store the temporary downloads
|
|
@@ -1191,7 +1177,7 @@ class KnowledgeScrapeError extends Error {
|
|
|
1191
1177
|
function getErrorReportUrl(error) {
|
|
1192
1178
|
const report = {
|
|
1193
1179
|
title: `🐜 Error report from ${NAME}`,
|
|
1194
|
-
body: spaceTrim((block) => `
|
|
1180
|
+
body: spaceTrim$2((block) => `
|
|
1195
1181
|
|
|
1196
1182
|
|
|
1197
1183
|
\`${error.name || 'Error'}\` has occurred in the [${NAME}], please look into it @${ADMIN_GITHUB_NAME}.
|
|
@@ -1570,6 +1556,8 @@ function removeDiacritics(input) {
|
|
|
1570
1556
|
/**
|
|
1571
1557
|
* Converts a given text to kebab-case format.
|
|
1572
1558
|
*
|
|
1559
|
+
* Note: [🔂] This function is idempotent.
|
|
1560
|
+
*
|
|
1573
1561
|
* @param text The text to be converted.
|
|
1574
1562
|
* @returns The kebab-case formatted string.
|
|
1575
1563
|
* @example 'hello-world'
|
|
@@ -1725,6 +1713,8 @@ function removeEmojis(text) {
|
|
|
1725
1713
|
/**
|
|
1726
1714
|
* Converts a title string into a normalized name.
|
|
1727
1715
|
*
|
|
1716
|
+
* Note: [🔂] This function is idempotent.
|
|
1717
|
+
*
|
|
1728
1718
|
* @param value The title string to be converted to a name.
|
|
1729
1719
|
* @returns A normalized name derived from the input title.
|
|
1730
1720
|
* @example 'Hello World!' -> 'hello-world'
|
|
@@ -1816,7 +1806,7 @@ async function getScraperIntermediateSource(source, options) {
|
|
|
1816
1806
|
* Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
|
|
1817
1807
|
*/
|
|
1818
1808
|
|
|
1819
|
-
var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModels",description:"List of available model names together with their descriptions as JSON",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelsRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n```json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n```\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n```json\n{availableModels}\n```\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelsRequirements",format:"JSON",dependentParameterNames:["availableModels","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModels}` List of available model names together with their descriptions as JSON\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelsRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n\\`\\`\\`json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n\\`\\`\\`json\n{availableModels}\n\\`\\`\\`\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelsRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"},{title:"📊 Curriculum Audit",pipelineUrl:"https://promptbook.studio/promptbook//examples/lsvp-asistent.book",formfactorName:"GENERIC",parameters:[{name:"result",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"prompt",title:"Prompt",content:"Asistent pro LŠVP\n\nPERSONA Jsi asistent pro RVP Lyceum v rámci Národního pedagogického institutu České Republiky\nMETA IMAGE https://edulk.cz/getFile/id:475818/type:large/02%20zna%C4%8Dka%20npi.jpg\nRULE Pokud jsi nejsi jistý, napiš nevím\nKNOWLEDGE ./241129_Lyceum_final.pdf\nCONTEXT Obecně dokážeš řešit libovolné ŠVP, aktuálně řešíš {Školní vzdělávací program LYCEUM}\nRULE Z {Porovnání RVP a ŠVP - postup} je nejdůležitější fáze 3\nKNOWLEDGE {Školní vzdělávací program LYCEUM} ./ŠVP Lyceum - Finance v digitální době.pdf\nKNOWLEDGE @Slovník\n\n**Interní slovník - RVP/ŠVP**\n\n**RVP**\n\nRámcový vzdělávací program pro obor vzdělání Lyceum je dokument na národní úrovni, který formuluje požadavky na školní vzdělávací programy ve formě především očekávaných výsledků učení, kterých mají žáci absolvováním tohoto programu na dané škole dosáhnout.\n\n**ŠVP**\n\nŠkolní vzdělávací program pro obor vzdělání Lyceum je dokument každé jednotlivé školy, který popisuje v jakých vyučovacích předmětech/ vzdělávacích modulech a v jakých ročnících budou požadované očekávané výsledky učení naplněny. Zároveň formuluje další očekávané výsledky učení, které naplňují disponibilní část vyučovacího času určeného RVP pro tento obor vzdělání.\n\n**Očekávaný výsledek učení (OVU)**\n\nVyjadřuje jednotlivý požadavek na to, co mají žáci umět na konci vzdělávacího programu, tzn. jejich požadované kompetence. Je vyjádřen formulací, která je uvozena činnostním slovesem a dále obsahuje předmět této činnosti. Formulace je konkretizována resp. doplněna zpravidla formou odrážek vymezením dílčích znalostí, dovedností, postojů, jejichž splnění je předpokladem dosažení OVU jako celku.\n\n_Příklad:_\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th><p><strong>Žák/žákyně řídí realizaci jednoduchého projektu</strong></p></th></tr><tr><td><ul><li>naplánuje aktivity projektu</li></ul></td></tr><tr><td><ul><li>navrhne rozpočet projektu vzhledem k navrženým aktivitám</li></ul></td></tr><tr><td><ul><li>stanoví základní ukazatele a sleduje jejich naplňování</li></ul></td></tr><tr><td><ul><li>vede projektový tým</li></ul></td></tr><tr><td><ul><li>uvede, jak by řešil krizové situace v projektu</li></ul></td></tr><tr><td><ul><li>vyhodnotí úspěšnost projektu</li></ul></td></tr></tbody></table></div>\n\n**Vzdělávací oblasti**\n\nOčekávané výsledky učení jsou v **_RVP členěny do 4 vzdělávacích oblastí_**, které tvoří společný všeobecně vzdělávací základ:\n\n- Osobnostní rozvoj, vzdělávání ke zdraví, bezpečí a produktivnímu pracovnímu životu (kariéře)\n- Komunikační a jazykové vzdělávání\n- Aplikované vzdělávání STEM (Science, Technology, Engeneering, Math), tj. přírodní vědy, informatika, technika, matematika\n- Prakticky orientované vzdělávání společenskovědní a humanitní\n\nKaždá vzdělávací oblast se dále člení na okruhy, v jejichž rámci jsou OVU samostatně číslované.\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th rowspan=\"21\"><ul><li>Prakticky orientované vzdělávání společenskovědní a humanitní</li></ul></th><th rowspan=\"21\"><p><strong>Člověk, ekonomie a podnikání</strong></p></th><th rowspan=\"7\"><p><strong>1</strong></p></th><th><p><strong>zpracuje podklady související s podnikáním</strong></p></th></tr><tr><td><p>připraví podnikatelský záměr</p></td></tr><tr><td><p>sestaví zakladatelský rozpočet</p></td></tr><tr><td><p>zkalkuluje cenu zboží nebo služby</p></td></tr><tr><td><p>vysvětlí na příkladu základní povinnosti podnikatele vůči státu a zaměstnancům</p></td></tr><tr><td><p>vede daňovou evidenci</p></td></tr><tr><td><p>vysvětlí na příkladech etiku v podnikání</p></td></tr><tr><td rowspan=\"7\"><p><strong>2</strong></p></td><td><p><strong>řídí realizaci jednoduchého projektu</strong></p></td></tr><tr><td><p>naplánuje aktivity projektu</p></td></tr><tr><td><p>navrhne rozpočet projektu vzhledem k navrženým aktivitám</p></td></tr><tr><td><p>stanoví základní ukazatele a sleduje jejich naplňování</p></td></tr><tr><td><p>vede projektový tým</p></td></tr><tr><td><p>uvede, jak by řešil krizové situace v projektu</p></td></tr><tr><td><p>vyhodnotí úspěšnost projektu</p></td></tr><tr><td rowspan=\"7\"><p><strong>3</strong></p></td><td><p><strong>aplikuje ekonomické teorie v osobním a profesním životě</strong></p></td></tr><tr><td><p>vysvětlí základní ekonomické otázky</p></td></tr><tr><td><p>vysvětí stanovení rovnovážné ceny na dokonalém i nedokonalém trhu</p></td></tr><tr><td><p>charakterizuje výrobní faktory a vysvětlí hranici produkčních možností a náklady obětované příležitosti</p></td></tr><tr><td><p>uvede nejdůležitější makroekonomické pojmy a vliv jejich výše na kvalitu života a podnikání v daném státě</p></td></tr><tr><td><p>vysvětlí podstatu inflace a její důsledky na finanční situaci obyvatel a na příkladu ukáže jak se bránit jejím nepříznivým důsledkům</p></td></tr><tr><td><p>uvede hlavní výhody a nevýhody mezinárodního obchodu a vliv ochranářských opatření na ekonomickou situaci dané země</p></td></tr><tr><td></td><td></td><td><p><strong>4</strong></p></td><td><p>Atd.</p></td></tr></tbody></table></div>\n\n**Vyučovací předmět / vzdělávací modul**\n\nOčekávané výsledky učení jsou v **ŠVP** členěny do vyučovacích předmětů nebo vzdělávacích modulů, které jsou dále zařazeny do jednoho nebo více ročníků 4letého studia. Vyučovací předmět / vzdělávací modul tvoří vyučovací jednotku, kde jsou očekávané výsledky učení dále rozpracovány pro potřeby výuky podle následující šablony\n\n| **A. VSTUPNÍ ČÁST** |\n| --- |\n| **1\\. Název** |\n| **2\\. Kód** (kódy by měly být navázány na obory vzdělání a výsledky učení) |\n| **2a) Kategorie vzdělání** - v případě, že nebude součástí kódu |\n| **3\\. Typ vyučovací jednotky** (modul, předmět, stáž apod.) |\n| **4\\. Délka** (počet hodin - dělitelný čtyřmi (optimální modul 16, 32 hodin = týden výuky) |\n| **5\\. Platnost** (datum, od kterého platí) |\n| **6\\. Vstupní předpoklady** (vymezení požadované úrovně vstupních vědomostí a dovedností, které jsou předpokladem úspěšného studia) |\n| |\n| **B. JÁDRO VYUČOVACÍ JEDNOTKY** |\n| **1\\. Charakteristika** (stručná anotace popisující obecné cíle a pojetí) |\n| **2\\. Očekávané výsledky učení a jejich indikátory (převzaté z RVP nebo dále konkretizované)** |\n| **3\\. Podpora rozvoje klíčových kompetencí a základních gramotností** (které klíčové kompetence jsou v rozvíjeny) |\n| **4\\. Obsah vzdělávání** (rozpis učiva) |\n| **5\\. Vzdělávací strategie** (strategie výuky, resp. učební činnosti žáků, které jsou doporučené pro dosažení výsledků) |\n| |\n| **C. VÝSTUPNÍ ČÁST** |\n| **1\\. Způsob ověřování dosažených výsledků** (ve vazbě na jednotlivé výsledky učení) |\n| **2\\. Kritéria hodnocení** (co znamená splnění výsledků učení, kdy je splněna celá vyučovací jednotka, kritéria pro známky, příp. procentuální, slovní hodnocení) |\n| **3\\. Doporučená studijní literatura, odkazy na ilustrační zdroje** |\n| **4\\. Poznámky** |\n\n**Soulad OVU RVP a ŠVP**\n\nTento soulad je předmětem zjišťování. Soulad nastává, jestliže jsou očekávané výsledky učení z jednotlivých vzdělávacích oblastí RVP **obsaženy** ve vyučovacích předmětech/ vzdělávacích modulech ŠVP jednotlivých škol, tzn. že v ŠVP se objevuje jejich formulace buď v doslovném nebo podobném znění v jednom nebo více vyučovacích předmětech/ vzdělávacích modulech.\n\n_Příklad souladu:_\n\nRVP ŠVP - komunikace a marketing (SŠ obchodní Č.\n\n| **2** | **řídí realizaci jednoduchého projektu** |\n| --- | --- |\n| naplánuje aktivity projektu |\n| navrhne rozpočet projektu vzhledem k navrženým aktivitám |\n| stanoví základní ukazatele a sleduje jejich naplňování |\n| vede projektový tým |\n| uvede, jak by řešil krizové situace v projektu |\n| vyhodnotí úspěšnost projektu |\n\nKNOWLEDGE {Porovnání RVP a ŠVP - postup}\n\n\n# AUDITNÍ PROTOKOL ŠVP-RVP\n\n# (POPIS KONTROLNÍHO ALGORITMU)\n\nMetodika je určena pro **Kvantifikaci Shody** školního vzdělávacího programu (ŠVP) s Rámcovým vzdělávacím programem (RVP).\n\n## FÁZE 1: VALIDACE DOKUMENTACE\n\n**Cíl:** Ověřit platnost, aktuálnost a strukturu zdrojových dokumentů.\n\n- **RVP Verifikace:** Otevřít aktuální verzi RVP (např. RVP ZV/G/SOŠ).\n- **Typová shoda:** Ověřit, že RVP se vztahuje k danému typu školy.\n- **ŠVP Dimenze:** Identifikovat a izolovat relevantní části ŠVP: Profil absolventa, Klíčové kompetence (KK), Vzdělávací oblasti (VO), případně Učební plán (UP).\n- **Verzování:** Potvrdit, že obě verze (RVP a ŠVP) jsou nejnovější a platné (včetně dodatků RVP).\n\n## FÁZE 2: DATABÁZOVÉ MAPOVÁNÍ VÝSTUPŮ (MASTER MATICE)\n\n**Cíl:** Vytvořit systémovou databázi pro křížové porovnání všech povinných komponent RVP se ŠVP.\n\n- **Dekompozice RVP:** Rozložit RVP na základní povinné komponenty: Klíčové kompetence, Vzdělávací oblasti a obory, Očekávané výstupy (OVU), Průřezová témata (PT).\n- **Přiřazovací mapa:** Vytvořit hlavní kontrolní matici (Master Matice) pro záznam vazeb.\n\n| Oblast RVP | Výstup RVP (OVU) | Odpovídající Část ŠVP (Předmět/Ročník) | Konkrétní Tématický Celek v ŠVP | Stav Shody (Protokol) |\n| --- | --- | --- | --- | --- |\n| ... | ... | ... | ... | ... |\n| --- | --- | --- | --- | --- |\n\n## FÁZE 3: ALGORITMICKÁ KONTROLA POKRYTÍ A HLOUBKY\n\n**Cíl:** Posoudit, zda každý povinný výstup RVP je adekvátně reflektován v obsahu ŠVP, a přidělit bodovou hodnotu pro kvantifikaci.\n\n- **Audit OVU:** Projít každý jednotlivý Očekávaný výstup (OVU) z RVP.\n- **Kódování stavu a bodování:** U každého OVU v matici označit stav pokrytí dle následujícího schématu:\n\n| Kód (Protokol) | Popis (Kvalitativní zjištění) | Bodová hodnota (Kvantifikace) |\n| --- | --- | --- |\n| ✅ | Plná shoda (Výstup pokryt v plném rozsahu, odpovídající úrovni RVP) | 1,0 |\n| --- | --- | --- |\n| ⚠️ | Částečná shoda (Formální pokrytí, omezený rozsah, chybná návaznost) | 0,5 |\n| --- | --- | --- |\n| ❌ | Absence (Výstup zcela chybí v obsahu ŠVP) | 0,0 |\n| --- | --- | --- |\n\n- **Defektologie ŠVP:** Identifikovat a zaznamenat deficity ŠVP: Chybějící výstupy (❌), Sémantické překryvy, Přetížení obsahu.\n- **Kvalitativní posun:** Ověřit, zda je formulace výstupů v ŠVP **aktivní, měřitelná a v souladu** s úrovní RVP.\n\n## FÁZE 4: STRUKTURÁLNÍ VERIFIKACE NÁVAZNOSTI (VERTIKÁLA/HORIZONTÁLA)\n\n**Cíl:** Zkontrolovat logickou posloupnost a provázanost učiva v rámci ŠVP.\n\n- **Vertikální Kontrola:** Ověřit posloupnost OVU a učiva uvnitř jednoho předmětu/oblasti (postup od jednodušších ke složitějším konceptům napříč ročníky).\n- **Horizontální Kontrola:** Zkontrolovat logické provázání napříč vzdělávacími oblastmi a předměty (např. fyzika ↔ matematika).\n- **PT Integrace:** Audit reálné integrace Průřezových témat (PT) do konkrétních částí obsahu, metod a projektů.\n\n## FÁZE 5: ANALÝZA ŠKOLNÍ PROFILACE A ROZŠÍŘENÍ RVP\n\n**Cíl:** Validovat, že profilace školy je **v souladu** s RVP a nejedná se o **rozpor**.\n\n- **Nekonfliktnost:** Porovnat definovaný Profil absolventa školy s Klíčovými kompetencemi RVP. Profil ŠVP musí RVP rozvíjet, nikoli mu odporovat.\n- **Modularita:** Zkontrolovat, zda volitelné předměty a rozšiřující moduly logicky navazují na vzdělávací oblasti RVP.\n- **Implementace specializace:** Popisně uvést, jak je školní profilace (např. STEM zaměření, projektová výuka) integrována do OVU a kompetencí definovaných RVP.\n\n## FÁZE 6: GENERÁTOR ZÁVĚREČNÉ ZPRÁVY A KVANTIFIKACE\n\n**Cíl:** Syntetizovat výsledky, kvantifikovat soulad a generovat závazné návrhy na korekce.\n\n### 6.1 Kvantifikace Souladu\n\nVypočítat Index shody (IS) na základě bodového hodnocení (Fáze 3):\n\n### 6.2 Interpretace Indexu Shody (IS)\n\nKlasifikace souladu pro standardizované vyhodnocení:\n\n| Interval IS | Klasifikace souladu | Popis |\n| --- | --- | --- |\n| 95-100 % | Výborný soulad | ŠVP plně odpovídá RVP, pouze stylistické nebo formální rozdíly. |\n| --- | --- | --- |\n| 85-94 % | Dobrá shoda | ŠVP pokrývá všechny klíčové výstupy, menší korekce nutné. |\n| --- | --- | --- |\n| 70-84 % | Částečná shoda | Významné nedostatky v některých oblastech, nutná revize obsahu. |\n| --- | --- | --- |\n| < 70 % | Kritická neshoda | ŠVP neplní rámcové požadavky, ohrožuje legislativní soulad. |\n| --- | --- | --- |\n\n### 6.3 Doplňkové Indexy\n\nVypočítat následující doplňkové indexy pro detailní kvalitativní analýzu:\n\n- **Index kompetenčního souladu (IKS):** Poměr pokrytí klíčových kompetencí RVP v ŠVP.\n- **Index průřezové integrace (IPI):** Míra reálné integrace průřezových témat do výuky.\n- **Index hloubky pokrytí (IHP):** Procento výstupů, které jsou v ŠVP rozvedeny na konkrétní výukové cíle (měřitelné, aktivní formulace).\n- **Index profilové rozšiřitelnosti (IPR):** Kolik rozšiřujících nebo profilových výstupů přesahuje rámec RVP, aniž by narušily jeho strukturu.\n\n### 6.4 Vizuální výstupy\n\nZajistit generování následujících vizualizací pro Závěrečnou zprávu:\n\n- Graf pokrytí po vzdělávacích oblastech (Sloupcový graf IS pro VO).\n- Pavoukový diagram Klíčových kompetencí (RVP vs. ŠVP).\n- Mapa defektů (Vizualizace ❌ a ⚠️ výstupů).\n\n### 6.5 Struktura Závěrečné Zprávy\n\nZpráva musí být strukturována dle standardizovaného formátu:\n\n| Oddíl | Obsah |\n| --- | --- |\n| A. Identifikace | Název školy, IZO, typ školy, datum revize, zpracovatel, verze ŠVP a RVP. |\n| --- | --- |\n| B. Shrnutí výsledků | Celkový Index Shody (IS), hlavní závěry a doporučení. |\n| --- | --- |\n| C. Kvantitativní analýza | Přehled IS v % dle kategorií OVU / VO / kompetencí. |\n| --- | --- |\n| D. Kvalitativní analýza | Slovní zhodnocení kvality souladu (formulace, obtížnost, integrace PT). |\n| --- | --- |\n| E. Rizikové oblasti | Přehled nalezených defektů (chybějící OVU, přetížení, formální shoda). |\n| --- | --- |\n| F. Návrhy opatření (Korekční plán) | Přesné návrhy změn - **Co, Kde, Kdo** má upravit, včetně termínu. |\n| --- | --- |\n| G. Přílohy | Master Matice (Fáze 2-3), revizní tabulka, výstupní grafy a metriky. |\n| --- | --- |\n\n\n\n\n.",resultingParameterName:"result",dependentParameterNames:[]}],personas:[],preparations:[{id:1,promptbookVersion:"0.103.0-9",usage:{price:{value:0},input:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}},output:{tokensCount:{value:0},charactersCount:{value:0},wordsCount:{value:0},sentencesCount:{value:0},linesCount:{value:0},paragraphsCount:{value:0},pagesCount:{value:0}}}}],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"Asistent pro LŠVP\n\nPERSONA Jsi asistent pro RVP Lyceum v rámci Národního pedagogického institutu České Republiky\nMETA IMAGE https://edulk.cz/getFile/id:475818/type:large/02%20zna%C4%8Dka%20npi.jpg\nRULE Pokud jsi nejsi jistý, napiš nevím\nKNOWLEDGE ./241129_Lyceum_final.pdf\nCONTEXT Obecně dokážeš řešit libovolné ŠVP, aktuálně řešíš {Školní vzdělávací program LYCEUM}\nRULE Z {Porovnání RVP a ŠVP - postup} je nejdůležitější fáze 3\nKNOWLEDGE {Školní vzdělávací program LYCEUM} ./ŠVP Lyceum - Finance v digitální době.pdf\nKNOWLEDGE @Slovník\n\n**Interní slovník - RVP/ŠVP**\n\n**RVP**\n\nRámcový vzdělávací program pro obor vzdělání Lyceum je dokument na národní úrovni, který formuluje požadavky na školní vzdělávací programy ve formě především očekávaných výsledků učení, kterých mají žáci absolvováním tohoto programu na dané škole dosáhnout.\n\n**ŠVP**\n\nŠkolní vzdělávací program pro obor vzdělání Lyceum je dokument každé jednotlivé školy, který popisuje v jakých vyučovacích předmětech/ vzdělávacích modulech a v jakých ročnících budou požadované očekávané výsledky učení naplněny. Zároveň formuluje další očekávané výsledky učení, které naplňují disponibilní část vyučovacího času určeného RVP pro tento obor vzdělání.\n\n**Očekávaný výsledek učení (OVU)**\n\nVyjadřuje jednotlivý požadavek na to, co mají žáci umět na konci vzdělávacího programu, tzn. jejich požadované kompetence. Je vyjádřen formulací, která je uvozena činnostním slovesem a dále obsahuje předmět této činnosti. Formulace je konkretizována resp. doplněna zpravidla formou odrážek vymezením dílčích znalostí, dovedností, postojů, jejichž splnění je předpokladem dosažení OVU jako celku.\n\n_Příklad:_\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th><p><strong>Žák/žákyně řídí realizaci jednoduchého projektu</strong></p></th></tr><tr><td><ul><li>naplánuje aktivity projektu</li></ul></td></tr><tr><td><ul><li>navrhne rozpočet projektu vzhledem k navrženým aktivitám</li></ul></td></tr><tr><td><ul><li>stanoví základní ukazatele a sleduje jejich naplňování</li></ul></td></tr><tr><td><ul><li>vede projektový tým</li></ul></td></tr><tr><td><ul><li>uvede, jak by řešil krizové situace v projektu</li></ul></td></tr><tr><td><ul><li>vyhodnotí úspěšnost projektu</li></ul></td></tr></tbody></table></div>\n\n**Vzdělávací oblasti**\n\nOčekávané výsledky učení jsou v **_RVP členěny do 4 vzdělávacích oblastí_**, které tvoří společný všeobecně vzdělávací základ:\n\n- Osobnostní rozvoj, vzdělávání ke zdraví, bezpečí a produktivnímu pracovnímu životu (kariéře)\n- Komunikační a jazykové vzdělávání\n- Aplikované vzdělávání STEM (Science, Technology, Engeneering, Math), tj. přírodní vědy, informatika, technika, matematika\n- Prakticky orientované vzdělávání společenskovědní a humanitní\n\nKaždá vzdělávací oblast se dále člení na okruhy, v jejichž rámci jsou OVU samostatně číslované.\n\n<div class=\"joplin-table-wrapper\"><table><tbody><tr><th rowspan=\"21\"><ul><li>Prakticky orientované vzdělávání společenskovědní a humanitní</li></ul></th><th rowspan=\"21\"><p><strong>Člověk, ekonomie a podnikání</strong></p></th><th rowspan=\"7\"><p><strong>1</strong></p></th><th><p><strong>zpracuje podklady související s podnikáním</strong></p></th></tr><tr><td><p>připraví podnikatelský záměr</p></td></tr><tr><td><p>sestaví zakladatelský rozpočet</p></td></tr><tr><td><p>zkalkuluje cenu zboží nebo služby</p></td></tr><tr><td><p>vysvětlí na příkladu základní povinnosti podnikatele vůči státu a zaměstnancům</p></td></tr><tr><td><p>vede daňovou evidenci</p></td></tr><tr><td><p>vysvětlí na příkladech etiku v podnikání</p></td></tr><tr><td rowspan=\"7\"><p><strong>2</strong></p></td><td><p><strong>řídí realizaci jednoduchého projektu</strong></p></td></tr><tr><td><p>naplánuje aktivity projektu</p></td></tr><tr><td><p>navrhne rozpočet projektu vzhledem k navrženým aktivitám</p></td></tr><tr><td><p>stanoví základní ukazatele a sleduje jejich naplňování</p></td></tr><tr><td><p>vede projektový tým</p></td></tr><tr><td><p>uvede, jak by řešil krizové situace v projektu</p></td></tr><tr><td><p>vyhodnotí úspěšnost projektu</p></td></tr><tr><td rowspan=\"7\"><p><strong>3</strong></p></td><td><p><strong>aplikuje ekonomické teorie v osobním a profesním životě</strong></p></td></tr><tr><td><p>vysvětlí základní ekonomické otázky</p></td></tr><tr><td><p>vysvětí stanovení rovnovážné ceny na dokonalém i nedokonalém trhu</p></td></tr><tr><td><p>charakterizuje výrobní faktory a vysvětlí hranici produkčních možností a náklady obětované příležitosti</p></td></tr><tr><td><p>uvede nejdůležitější makroekonomické pojmy a vliv jejich výše na kvalitu života a podnikání v daném státě</p></td></tr><tr><td><p>vysvětlí podstatu inflace a její důsledky na finanční situaci obyvatel a na příkladu ukáže jak se bránit jejím nepříznivým důsledkům</p></td></tr><tr><td><p>uvede hlavní výhody a nevýhody mezinárodního obchodu a vliv ochranářských opatření na ekonomickou situaci dané země</p></td></tr><tr><td></td><td></td><td><p><strong>4</strong></p></td><td><p>Atd.</p></td></tr></tbody></table></div>\n\n**Vyučovací předmět / vzdělávací modul**\n\nOčekávané výsledky učení jsou v **ŠVP** členěny do vyučovacích předmětů nebo vzdělávacích modulů, které jsou dále zařazeny do jednoho nebo více ročníků 4letého studia. Vyučovací předmět / vzdělávací modul tvoří vyučovací jednotku, kde jsou očekávané výsledky učení dále rozpracovány pro potřeby výuky podle následující šablony\n\n| **A. VSTUPNÍ ČÁST** |\n| --- |\n| **1\\. Název** |\n| **2\\. Kód** (kódy by měly být navázány na obory vzdělání a výsledky učení) |\n| **2a) Kategorie vzdělání** - v případě, že nebude součástí kódu |\n| **3\\. Typ vyučovací jednotky** (modul, předmět, stáž apod.) |\n| **4\\. Délka** (počet hodin - dělitelný čtyřmi (optimální modul 16, 32 hodin = týden výuky) |\n| **5\\. Platnost** (datum, od kterého platí) |\n| **6\\. Vstupní předpoklady** (vymezení požadované úrovně vstupních vědomostí a dovedností, které jsou předpokladem úspěšného studia) |\n| |\n| **B. JÁDRO VYUČOVACÍ JEDNOTKY** |\n| **1\\. Charakteristika** (stručná anotace popisující obecné cíle a pojetí) |\n| **2\\. Očekávané výsledky učení a jejich indikátory (převzaté z RVP nebo dále konkretizované)** |\n| **3\\. Podpora rozvoje klíčových kompetencí a základních gramotností** (které klíčové kompetence jsou v rozvíjeny) |\n| **4\\. Obsah vzdělávání** (rozpis učiva) |\n| **5\\. Vzdělávací strategie** (strategie výuky, resp. učební činnosti žáků, které jsou doporučené pro dosažení výsledků) |\n| |\n| **C. VÝSTUPNÍ ČÁST** |\n| **1\\. Způsob ověřování dosažených výsledků** (ve vazbě na jednotlivé výsledky učení) |\n| **2\\. Kritéria hodnocení** (co znamená splnění výsledků učení, kdy je splněna celá vyučovací jednotka, kritéria pro známky, příp. procentuální, slovní hodnocení) |\n| **3\\. Doporučená studijní literatura, odkazy na ilustrační zdroje** |\n| **4\\. Poznámky** |\n\n**Soulad OVU RVP a ŠVP**\n\nTento soulad je předmětem zjišťování. Soulad nastává, jestliže jsou očekávané výsledky učení z jednotlivých vzdělávacích oblastí RVP **obsaženy** ve vyučovacích předmětech/ vzdělávacích modulech ŠVP jednotlivých škol, tzn. že v ŠVP se objevuje jejich formulace buď v doslovném nebo podobném znění v jednom nebo více vyučovacích předmětech/ vzdělávacích modulech.\n\n_Příklad souladu:_\n\nRVP ŠVP - komunikace a marketing (SŠ obchodní Č.\n\n| **2** | **řídí realizaci jednoduchého projektu** |\n| --- | --- |\n| naplánuje aktivity projektu |\n| navrhne rozpočet projektu vzhledem k navrženým aktivitám |\n| stanoví základní ukazatele a sleduje jejich naplňování |\n| vede projektový tým |\n| uvede, jak by řešil krizové situace v projektu |\n| vyhodnotí úspěšnost projektu |\n\nKNOWLEDGE {Porovnání RVP a ŠVP - postup}\n\n\n# AUDITNÍ PROTOKOL ŠVP-RVP\n\n# (POPIS KONTROLNÍHO ALGORITMU)\n\nMetodika je určena pro **Kvantifikaci Shody** školního vzdělávacího programu (ŠVP) s Rámcovým vzdělávacím programem (RVP).\n\n## FÁZE 1: VALIDACE DOKUMENTACE\n\n**Cíl:** Ověřit platnost, aktuálnost a strukturu zdrojových dokumentů.\n\n- **RVP Verifikace:** Otevřít aktuální verzi RVP (např. RVP ZV/G/SOŠ).\n- **Typová shoda:** Ověřit, že RVP se vztahuje k danému typu školy.\n- **ŠVP Dimenze:** Identifikovat a izolovat relevantní části ŠVP: Profil absolventa, Klíčové kompetence (KK), Vzdělávací oblasti (VO), případně Učební plán (UP).\n- **Verzování:** Potvrdit, že obě verze (RVP a ŠVP) jsou nejnovější a platné (včetně dodatků RVP).\n\n## FÁZE 2: DATABÁZOVÉ MAPOVÁNÍ VÝSTUPŮ (MASTER MATICE)\n\n**Cíl:** Vytvořit systémovou databázi pro křížové porovnání všech povinných komponent RVP se ŠVP.\n\n- **Dekompozice RVP:** Rozložit RVP na základní povinné komponenty: Klíčové kompetence, Vzdělávací oblasti a obory, Očekávané výstupy (OVU), Průřezová témata (PT).\n- **Přiřazovací mapa:** Vytvořit hlavní kontrolní matici (Master Matice) pro záznam vazeb.\n\n| Oblast RVP | Výstup RVP (OVU) | Odpovídající Část ŠVP (Předmět/Ročník) | Konkrétní Tématický Celek v ŠVP | Stav Shody (Protokol) |\n| --- | --- | --- | --- | --- |\n| ... | ... | ... | ... | ... |\n| --- | --- | --- | --- | --- |\n\n## FÁZE 3: ALGORITMICKÁ KONTROLA POKRYTÍ A HLOUBKY\n\n**Cíl:** Posoudit, zda každý povinný výstup RVP je adekvátně reflektován v obsahu ŠVP, a přidělit bodovou hodnotu pro kvantifikaci.\n\n- **Audit OVU:** Projít každý jednotlivý Očekávaný výstup (OVU) z RVP.\n- **Kódování stavu a bodování:** U každého OVU v matici označit stav pokrytí dle následujícího schématu:\n\n| Kód (Protokol) | Popis (Kvalitativní zjištění) | Bodová hodnota (Kvantifikace) |\n| --- | --- | --- |\n| ✅ | Plná shoda (Výstup pokryt v plném rozsahu, odpovídající úrovni RVP) | 1,0 |\n| --- | --- | --- |\n| ⚠️ | Částečná shoda (Formální pokrytí, omezený rozsah, chybná návaznost) | 0,5 |\n| --- | --- | --- |\n| ❌ | Absence (Výstup zcela chybí v obsahu ŠVP) | 0,0 |\n| --- | --- | --- |\n\n- **Defektologie ŠVP:** Identifikovat a zaznamenat deficity ŠVP: Chybějící výstupy (❌), Sémantické překryvy, Přetížení obsahu.\n- **Kvalitativní posun:** Ověřit, zda je formulace výstupů v ŠVP **aktivní, měřitelná a v souladu** s úrovní RVP.\n\n## FÁZE 4: STRUKTURÁLNÍ VERIFIKACE NÁVAZNOSTI (VERTIKÁLA/HORIZONTÁLA)\n\n**Cíl:** Zkontrolovat logickou posloupnost a provázanost učiva v rámci ŠVP.\n\n- **Vertikální Kontrola:** Ověřit posloupnost OVU a učiva uvnitř jednoho předmětu/oblasti (postup od jednodušších ke složitějším konceptům napříč ročníky).\n- **Horizontální Kontrola:** Zkontrolovat logické provázání napříč vzdělávacími oblastmi a předměty (např. fyzika ↔ matematika).\n- **PT Integrace:** Audit reálné integrace Průřezových témat (PT) do konkrétních částí obsahu, metod a projektů.\n\n## FÁZE 5: ANALÝZA ŠKOLNÍ PROFILACE A ROZŠÍŘENÍ RVP\n\n**Cíl:** Validovat, že profilace školy je **v souladu** s RVP a nejedná se o **rozpor**.\n\n- **Nekonfliktnost:** Porovnat definovaný Profil absolventa školy s Klíčovými kompetencemi RVP. Profil ŠVP musí RVP rozvíjet, nikoli mu odporovat.\n- **Modularita:** Zkontrolovat, zda volitelné předměty a rozšiřující moduly logicky navazují na vzdělávací oblasti RVP.\n- **Implementace specializace:** Popisně uvést, jak je školní profilace (např. STEM zaměření, projektová výuka) integrována do OVU a kompetencí definovaných RVP.\n\n## FÁZE 6: GENERÁTOR ZÁVĚREČNÉ ZPRÁVY A KVANTIFIKACE\n\n**Cíl:** Syntetizovat výsledky, kvantifikovat soulad a generovat závazné návrhy na korekce.\n\n### 6.1 Kvantifikace Souladu\n\nVypočítat Index shody (IS) na základě bodového hodnocení (Fáze 3):\n\n### 6.2 Interpretace Indexu Shody (IS)\n\nKlasifikace souladu pro standardizované vyhodnocení:\n\n| Interval IS | Klasifikace souladu | Popis |\n| --- | --- | --- |\n| 95-100 % | Výborný soulad | ŠVP plně odpovídá RVP, pouze stylistické nebo formální rozdíly. |\n| --- | --- | --- |\n| 85-94 % | Dobrá shoda | ŠVP pokrývá všechny klíčové výstupy, menší korekce nutné. |\n| --- | --- | --- |\n| 70-84 % | Částečná shoda | Významné nedostatky v některých oblastech, nutná revize obsahu. |\n| --- | --- | --- |\n| < 70 % | Kritická neshoda | ŠVP neplní rámcové požadavky, ohrožuje legislativní soulad. |\n| --- | --- | --- |\n\n### 6.3 Doplňkové Indexy\n\nVypočítat následující doplňkové indexy pro detailní kvalitativní analýzu:\n\n- **Index kompetenčního souladu (IKS):** Poměr pokrytí klíčových kompetencí RVP v ŠVP.\n- **Index průřezové integrace (IPI):** Míra reálné integrace průřezových témat do výuky.\n- **Index hloubky pokrytí (IHP):** Procento výstupů, které jsou v ŠVP rozvedeny na konkrétní výukové cíle (měřitelné, aktivní formulace).\n- **Index profilové rozšiřitelnosti (IPR):** Kolik rozšiřujících nebo profilových výstupů přesahuje rámec RVP, aniž by narušily jeho strukturu.\n\n### 6.4 Vizuální výstupy\n\nZajistit generování následujících vizualizací pro Závěrečnou zprávu:\n\n- Graf pokrytí po vzdělávacích oblastech (Sloupcový graf IS pro VO).\n- Pavoukový diagram Klíčových kompetencí (RVP vs. ŠVP).\n- Mapa defektů (Vizualizace ❌ a ⚠️ výstupů).\n\n### 6.5 Struktura Závěrečné Zprávy\n\nZpráva musí být strukturována dle standardizovaného formátu:\n\n| Oddíl | Obsah |\n| --- | --- |\n| A. Identifikace | Název školy, IZO, typ školy, datum revize, zpracovatel, verze ŠVP a RVP. |\n| --- | --- |\n| B. Shrnutí výsledků | Celkový Index Shody (IS), hlavní závěry a doporučení. |\n| --- | --- |\n| C. Kvantitativní analýza | Přehled IS v % dle kategorií OVU / VO / kompetencí. |\n| --- | --- |\n| D. Kvalitativní analýza | Slovní zhodnocení kvality souladu (formulace, obtížnost, integrace PT). |\n| --- | --- |\n| E. Rizikové oblasti | Přehled nalezených defektů (chybějící OVU, přetížení, formální shoda). |\n| --- | --- |\n| F. Návrhy opatření (Korekční plán) | Přesné návrhy změn - **Co, Kde, Kdo** má upravit, včetně termínu. |\n| --- | --- |\n| G. Přílohy | Master Matice (Fáze 2-3), revizní tabulka, výstupní grafy a metriky. |\n| --- | --- |\n\n\n\n\n.\n"}],sourceFile:"./books/examples/lsvp-asistent.book"}];
|
|
1809
|
+
var PipelineCollection = [{title:"Prepare Knowledge from Markdown",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book",formfactorName:"GENERIC",parameters:[{name:"knowledgeContent",description:"Markdown document content",isInput:true,isOutput:false},{name:"knowledgePieces",description:"The knowledge JSON object",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}",resultingParameterName:"knowledgePieces",dependentParameterNames:["knowledgeContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge from Markdown\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book`\n- INPUT PARAMETER `{knowledgeContent}` Markdown document content\n- OUTPUT PARAMETER `{knowledgePieces}` The knowledge JSON object\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, extract the important knowledge from the document.\n\n# Rules\n\n- Make pieces of information concise, clear, and easy to understand\n- One piece of information should be approximately 1 paragraph\n- Divide the paragraphs by markdown horizontal lines ---\n- Omit irrelevant information\n- Group redundant information\n- Write just extracted information, nothing else\n\n# The document\n\nTake information from this document:\n\n> {knowledgeContent}\n```\n\n`-> {knowledgePieces}`\n"}],sourceFile:"./books/prepare-knowledge-from-markdown.book"},{title:"Prepare Keywords",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-keywords.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"keywords",description:"Keywords separated by comma",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}",resultingParameterName:"keywords",dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Keywords\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-keywords.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{keywords}` Keywords separated by comma\n\n## Knowledge\n\n<!-- TODO: [🍆] -FORMAT JSON -->\n\n```markdown\nYou are experienced data researcher, detect the important keywords in the document.\n\n# Rules\n\n- Write just keywords separated by comma\n\n# The document\n\nTake information from this document:\n\n> {knowledgePieceContent}\n```\n\n`-> {keywords}`\n"}],sourceFile:"./books/prepare-knowledge-keywords.book"},{title:"Prepare Knowledge-piece Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-knowledge-title.book",formfactorName:"GENERIC",parameters:[{name:"knowledgePieceContent",description:"The content",isInput:true,isOutput:false},{name:"title",description:"The title of the document",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"knowledge",title:"Knowledge",content:"You are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}",resultingParameterName:"title",expectations:{words:{min:1,max:8}},dependentParameterNames:["knowledgePieceContent"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Knowledge-piece Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-knowledge-title.book`\n- INPUT PARAMETER `{knowledgePieceContent}` The content\n- OUTPUT PARAMETER `{title}` The title of the document\n\n## Knowledge\n\n- EXPECT MIN 1 WORD\n- EXPECT MAX 8 WORDS\n\n```markdown\nYou are experienced content creator, write best title for the document.\n\n# Rules\n\n- Write just title, nothing else\n- Write maximum 5 words for the title\n\n# The document\n\n> {knowledgePieceContent}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-knowledge-title.book"},{title:"Prepare Persona",pipelineUrl:"https://promptbook.studio/promptbook/prepare-persona.book",formfactorName:"GENERIC",parameters:[{name:"availableModels",description:"List of available model names together with their descriptions as JSON",isInput:true,isOutput:false},{name:"personaDescription",description:"Description of the persona",isInput:true,isOutput:false},{name:"modelsRequirements",description:"Specific requirements for the model",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-model-requirements",title:"Make modelRequirements",content:"You are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n```json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n```\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n```json\n{availableModels}\n```\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}",resultingParameterName:"modelsRequirements",format:"JSON",dependentParameterNames:["availableModels","personaDescription"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Persona\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-persona.book`\n- INPUT PARAMETER `{availableModels}` List of available model names together with their descriptions as JSON\n- INPUT PARAMETER `{personaDescription}` Description of the persona\n- OUTPUT PARAMETER `{modelsRequirements}` Specific requirements for the model\n\n## Make modelRequirements\n\n- FORMAT JSON\n\n```markdown\nYou are an experienced AI engineer, you need to find the best models for virtual assistants:\n\n## Example\n\n\\`\\`\\`json\n[\n {\n \"modelName\": \"gpt-4o\",\n \"systemMessage\": \"You are experienced AI engineer and helpful assistant.\",\n \"temperature\": 0.7\n },\n {\n \"modelName\": \"claude-3-5-sonnet\",\n \"systemMessage\": \"You are a friendly and knowledgeable chatbot.\",\n \"temperature\": 0.5\n }\n]\n\\`\\`\\`\n\n## Instructions\n\n- Your output format is JSON array\n- Sort best-fitting models first\n- Omit any models that are not suitable\n- Write just the JSON, no other text should be present\n- Array contain items with following keys:\n - `modelName`: The name of the model to use\n - `systemMessage`: The system message to provide context to the model\n - `temperature`: The sampling temperature to use\n\n### Key `modelName`\n\nHere are the available models:\n\n\\`\\`\\`json\n{availableModels}\n\\`\\`\\`\n\n### Key `systemMessage`\n\nThe system message is used to communicate instructions or provide context to the model at the beginning of a conversation. It is displayed in a different format compared to user messages, helping the model understand its role in the conversation. The system message typically guides the model's behavior, sets the tone, or specifies desired output from the model. By utilizing the system message effectively, users can steer the model towards generating more accurate and relevant responses.\n\nFor example:\n\n> You are an experienced AI engineer and helpful assistant.\n\n> You are a friendly and knowledgeable chatbot.\n\n### Key `temperature`\n\nThe sampling temperature, between 0 and 1. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic. If set to 0, the model will use log probability to automatically increase the temperature until certain thresholds are hit.\n\nYou can pick a value between 0 and 2. For example:\n\n- `0.1`: Low temperature, extremely conservative and deterministic\n- `0.5`: Medium temperature, balanced between conservative and creative\n- `1.0`: High temperature, creative and bit random\n- `1.5`: Very high temperature, extremely creative and often chaotic and unpredictable\n- `2.0`: Maximum temperature, completely random and unpredictable, for some extreme creative use cases\n\n# The assistant\n\nTake this description of the persona:\n\n> {personaDescription}\n```\n\n`-> {modelsRequirements}`\n"}],sourceFile:"./books/prepare-persona.book"},{title:"Prepare Title",pipelineUrl:"https://promptbook.studio/promptbook/prepare-title.book",formfactorName:"GENERIC",parameters:[{name:"book",description:"The book to prepare the title for",isInput:true,isOutput:false},{name:"title",description:"Best title for the book",isInput:false,isOutput:true}],tasks:[{taskType:"PROMPT_TASK",name:"make-title",title:"Make title",content:"Make best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}",resultingParameterName:"title",expectations:{words:{min:1,max:8},lines:{min:1,max:1}},dependentParameterNames:["book"]}],personas:[],preparations:[],knowledgeSources:[],knowledgePieces:[],sources:[{type:"BOOK",path:null,content:"# Prepare Title\n\n- PIPELINE URL `https://promptbook.studio/promptbook/prepare-title.book`\n- INPUT PARAMETER `{book}` The book to prepare the title for\n- OUTPUT PARAMETER `{title}` Best title for the book\n\n## Make title\n\n- EXPECT MIN 1 Word\n- EXPECT MAX 8 Words\n- EXPECT EXACTLY 1 Line\n\n```markdown\nMake best title for given text which describes the workflow:\n\n## Rules\n\n- Write just title, nothing else\n- Title should be concise and clear - Write maximum ideally 2 words, maximum 5 words\n- Title starts with emoticon\n- Title should not mention the input and output of the workflow but the main purpose of the workflow\n _For example, not \"✍ Convert Knowledge-piece to title\" but \"✍ Title\"_\n\n## The workflow\n\n> {book}\n```\n\n`-> {title}`\n"}],sourceFile:"./books/prepare-title.book"}];
|
|
1820
1810
|
|
|
1821
1811
|
/**
|
|
1822
1812
|
* Checks if value is valid email
|
|
@@ -1923,6 +1913,8 @@ function isValidJsonString(value /* <- [👨⚖️] */) {
|
|
|
1923
1913
|
* Function `validatePipelineString` will validate the if the string is a valid pipeline string
|
|
1924
1914
|
* It does not check if the string is fully logically correct, but if it is a string that can be a pipeline string or the string looks completely different.
|
|
1925
1915
|
*
|
|
1916
|
+
* Note: [🔂] This function is idempotent.
|
|
1917
|
+
*
|
|
1926
1918
|
* @param {string} pipelineString the candidate for a pipeline string
|
|
1927
1919
|
* @returns {PipelineString} the same string as input, but validated as valid
|
|
1928
1920
|
* @throws {ParseError} if the string is not a valid pipeline string
|
|
@@ -2082,7 +2074,7 @@ function pipelineJsonToString(pipelineJson) {
|
|
|
2082
2074
|
pipelineString += '\n\n';
|
|
2083
2075
|
pipelineString += '```' + contentLanguage;
|
|
2084
2076
|
pipelineString += '\n';
|
|
2085
|
-
pipelineString += spaceTrim(content);
|
|
2077
|
+
pipelineString += spaceTrim$2(content);
|
|
2086
2078
|
// <- TODO: [main] !!3 Escape
|
|
2087
2079
|
// <- TODO: [🧠] Some clear strategy how to spaceTrim the blocks
|
|
2088
2080
|
pipelineString += '\n';
|
|
@@ -2203,7 +2195,7 @@ function checkSerializableAsJson(options) {
|
|
|
2203
2195
|
}
|
|
2204
2196
|
else if (typeof value === 'object') {
|
|
2205
2197
|
if (value instanceof Date) {
|
|
2206
|
-
throw new UnexpectedError(spaceTrim((block) => `
|
|
2198
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
2207
2199
|
\`${name}\` is Date
|
|
2208
2200
|
|
|
2209
2201
|
Use \`string_date_iso8601\` instead
|
|
@@ -2222,7 +2214,7 @@ function checkSerializableAsJson(options) {
|
|
|
2222
2214
|
throw new UnexpectedError(`${name} is RegExp`);
|
|
2223
2215
|
}
|
|
2224
2216
|
else if (value instanceof Error) {
|
|
2225
|
-
throw new UnexpectedError(spaceTrim((block) => `
|
|
2217
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
2226
2218
|
\`${name}\` is unserialized Error
|
|
2227
2219
|
|
|
2228
2220
|
Use function \`serializeError\`
|
|
@@ -2245,7 +2237,7 @@ function checkSerializableAsJson(options) {
|
|
|
2245
2237
|
}
|
|
2246
2238
|
catch (error) {
|
|
2247
2239
|
assertsError(error);
|
|
2248
|
-
throw new UnexpectedError(spaceTrim((block) => `
|
|
2240
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
2249
2241
|
\`${name}\` is not serializable
|
|
2250
2242
|
|
|
2251
2243
|
${block(error.stack || error.message)}
|
|
@@ -2277,7 +2269,7 @@ function checkSerializableAsJson(options) {
|
|
|
2277
2269
|
}
|
|
2278
2270
|
}
|
|
2279
2271
|
else {
|
|
2280
|
-
throw new UnexpectedError(spaceTrim((block) => `
|
|
2272
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
2281
2273
|
\`${name}\` is unknown type
|
|
2282
2274
|
|
|
2283
2275
|
Additional message for \`${name}\`:
|
|
@@ -2307,7 +2299,7 @@ function deepClone(objectValue) {
|
|
|
2307
2299
|
TODO: [🧠] Is there a better implementation?
|
|
2308
2300
|
> const propertyNames = Object.getOwnPropertyNames(objectValue);
|
|
2309
2301
|
> for (const propertyName of propertyNames) {
|
|
2310
|
-
> const value = (objectValue as
|
|
2302
|
+
> const value = (objectValue as chococake)[propertyName];
|
|
2311
2303
|
> if (value && typeof value === 'object') {
|
|
2312
2304
|
> deepClone(value);
|
|
2313
2305
|
> }
|
|
@@ -2512,6 +2504,8 @@ function isValidPipelineUrl(url) {
|
|
|
2512
2504
|
* - if it is valid json
|
|
2513
2505
|
* - if it is meaningful
|
|
2514
2506
|
*
|
|
2507
|
+
* Note: [🔂] This function is idempotent.
|
|
2508
|
+
*
|
|
2515
2509
|
* @param pipeline valid or invalid PipelineJson
|
|
2516
2510
|
* @returns the same pipeline if it is logically valid
|
|
2517
2511
|
* @throws {PipelineLogicError} on logical error in the pipeline
|
|
@@ -2878,7 +2872,7 @@ function unpreparePipeline(pipeline) {
|
|
|
2878
2872
|
* Library of pipelines that groups together pipelines for an application.
|
|
2879
2873
|
* This implementation is a very thin wrapper around the Array / Map of pipelines.
|
|
2880
2874
|
*
|
|
2881
|
-
* @private internal function of `
|
|
2875
|
+
* @private internal function of `createPipelineCollectionFromJson`, use `createPipelineCollectionFromJson` instead
|
|
2882
2876
|
* @see https://github.com/webgptorg/pipeline#pipeline-collection
|
|
2883
2877
|
*/
|
|
2884
2878
|
class SimplePipelineCollection {
|
|
@@ -2888,7 +2882,7 @@ class SimplePipelineCollection {
|
|
|
2888
2882
|
* @param pipelines Array of pipeline JSON objects to include in the collection
|
|
2889
2883
|
*
|
|
2890
2884
|
* Note: During the construction logic of all pipelines are validated
|
|
2891
|
-
* Note: It is not recommended to use this constructor directly, use `
|
|
2885
|
+
* Note: It is not recommended to use this constructor directly, use `createPipelineCollectionFromJson` *(or other variant)* instead
|
|
2892
2886
|
*/
|
|
2893
2887
|
constructor(...pipelines) {
|
|
2894
2888
|
this.collection = new Map();
|
|
@@ -2976,16 +2970,16 @@ class SimplePipelineCollection {
|
|
|
2976
2970
|
}
|
|
2977
2971
|
|
|
2978
2972
|
/**
|
|
2979
|
-
* Creates PipelineCollection from array of PipelineJson or PipelineString
|
|
2973
|
+
* Creates `PipelineCollection` from array of PipelineJson or PipelineString
|
|
2980
2974
|
*
|
|
2981
|
-
* Note: Functions `
|
|
2975
|
+
* Note: Functions `pipelineCollectionToJson` and `createPipelineCollectionFromJson` are complementary
|
|
2982
2976
|
* Note: Syntax, parsing, and logic consistency checks are performed on all sources during build
|
|
2983
2977
|
*
|
|
2984
2978
|
* @param promptbookSources
|
|
2985
2979
|
* @returns PipelineCollection
|
|
2986
2980
|
* @public exported from `@promptbook/core`
|
|
2987
2981
|
*/
|
|
2988
|
-
function
|
|
2982
|
+
function createPipelineCollectionFromJson(...promptbooks) {
|
|
2989
2983
|
return new SimplePipelineCollection(...promptbooks);
|
|
2990
2984
|
}
|
|
2991
2985
|
|
|
@@ -3010,6 +3004,7 @@ class MissingToolsError extends Error {
|
|
|
3010
3004
|
/**
|
|
3011
3005
|
* Generates random token
|
|
3012
3006
|
*
|
|
3007
|
+
* Note: `$` is used to indicate that this function is not a pure function - it is not deterministic
|
|
3013
3008
|
* Note: This function is cryptographically secure (it uses crypto.randomBytes internally)
|
|
3014
3009
|
*
|
|
3015
3010
|
* @private internal helper function
|
|
@@ -3019,6 +3014,7 @@ function $randomToken(randomness) {
|
|
|
3019
3014
|
return randomBytes(randomness).toString('hex');
|
|
3020
3015
|
}
|
|
3021
3016
|
/**
|
|
3017
|
+
* TODO: [🤶] Maybe export through `@promptbook/utils` or `@promptbook/random` package
|
|
3022
3018
|
* TODO: Maybe use nanoid instead https://github.com/ai/nanoid
|
|
3023
3019
|
*/
|
|
3024
3020
|
|
|
@@ -3137,6 +3133,22 @@ class CollectionError extends Error {
|
|
|
3137
3133
|
}
|
|
3138
3134
|
}
|
|
3139
3135
|
|
|
3136
|
+
/**
|
|
3137
|
+
* This error indicates error from the database
|
|
3138
|
+
*
|
|
3139
|
+
* @public exported from `@promptbook/core`
|
|
3140
|
+
*/
|
|
3141
|
+
class DatabaseError extends Error {
|
|
3142
|
+
constructor(message) {
|
|
3143
|
+
super(message);
|
|
3144
|
+
this.name = 'DatabaseError';
|
|
3145
|
+
Object.setPrototypeOf(this, DatabaseError.prototype);
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3148
|
+
/**
|
|
3149
|
+
* TODO: [🐱🚀] Explain that NotFoundError ([🐱🚀] and other specific errors) has priority over DatabaseError in some contexts
|
|
3150
|
+
*/
|
|
3151
|
+
|
|
3140
3152
|
/**
|
|
3141
3153
|
* This error occurs when some expectation is not met in the execution of the pipeline
|
|
3142
3154
|
*
|
|
@@ -3166,6 +3178,19 @@ class LimitReachedError extends Error {
|
|
|
3166
3178
|
}
|
|
3167
3179
|
}
|
|
3168
3180
|
|
|
3181
|
+
/**
|
|
3182
|
+
* This error indicates that promptbook operation is not allowed
|
|
3183
|
+
*
|
|
3184
|
+
* @public exported from `@promptbook/core`
|
|
3185
|
+
*/
|
|
3186
|
+
class NotAllowed extends Error {
|
|
3187
|
+
constructor(message) {
|
|
3188
|
+
super(message);
|
|
3189
|
+
this.name = 'NotAllowed';
|
|
3190
|
+
Object.setPrototypeOf(this, NotAllowed.prototype);
|
|
3191
|
+
}
|
|
3192
|
+
}
|
|
3193
|
+
|
|
3169
3194
|
/**
|
|
3170
3195
|
* This error type indicates that some part of the code is not implemented yet
|
|
3171
3196
|
*
|
|
@@ -3226,6 +3251,8 @@ const PROMPTBOOK_ERRORS = {
|
|
|
3226
3251
|
PromptbookFetchError,
|
|
3227
3252
|
UnexpectedError,
|
|
3228
3253
|
WrappedError,
|
|
3254
|
+
NotAllowed,
|
|
3255
|
+
DatabaseError,
|
|
3229
3256
|
// TODO: [🪑]> VersionMismatchError,
|
|
3230
3257
|
};
|
|
3231
3258
|
/**
|
|
@@ -3273,7 +3300,7 @@ function serializeError(error) {
|
|
|
3273
3300
|
const { name, message, stack } = error;
|
|
3274
3301
|
const { id } = error;
|
|
3275
3302
|
if (!Object.keys(ALL_ERRORS).includes(name)) {
|
|
3276
|
-
console.error(spaceTrim((block) => `
|
|
3303
|
+
console.error(spaceTrim$2((block) => `
|
|
3277
3304
|
|
|
3278
3305
|
Cannot serialize error with name "${name}"
|
|
3279
3306
|
|
|
@@ -3306,7 +3333,7 @@ function jsonParse(value) {
|
|
|
3306
3333
|
}
|
|
3307
3334
|
else if (typeof value !== 'string') {
|
|
3308
3335
|
console.error('Can not parse JSON from non-string value.', { text: value });
|
|
3309
|
-
throw new Error(spaceTrim(`
|
|
3336
|
+
throw new Error(spaceTrim$2(`
|
|
3310
3337
|
Can not parse JSON from non-string value.
|
|
3311
3338
|
|
|
3312
3339
|
The value type: ${typeof value}
|
|
@@ -3320,7 +3347,7 @@ function jsonParse(value) {
|
|
|
3320
3347
|
if (!(error instanceof Error)) {
|
|
3321
3348
|
throw error;
|
|
3322
3349
|
}
|
|
3323
|
-
throw new Error(spaceTrim((block) => `
|
|
3350
|
+
throw new Error(spaceTrim$2((block) => `
|
|
3324
3351
|
${block(error.message)}
|
|
3325
3352
|
|
|
3326
3353
|
The expected JSON text:
|
|
@@ -3373,7 +3400,7 @@ function deserializeError(error) {
|
|
|
3373
3400
|
message = `${name}: ${message}`;
|
|
3374
3401
|
}
|
|
3375
3402
|
if (stack !== undefined && stack !== '') {
|
|
3376
|
-
message = spaceTrim((block) => `
|
|
3403
|
+
message = spaceTrim$2((block) => `
|
|
3377
3404
|
${block(message)}
|
|
3378
3405
|
|
|
3379
3406
|
Original stack trace:
|
|
@@ -3441,6 +3468,7 @@ function createTask(options) {
|
|
|
3441
3468
|
let updatedAt = createdAt;
|
|
3442
3469
|
const errors = [];
|
|
3443
3470
|
const warnings = [];
|
|
3471
|
+
const llmCalls = [];
|
|
3444
3472
|
let currentValue = {};
|
|
3445
3473
|
let customTldr = null;
|
|
3446
3474
|
const partialResultSubject = new Subject();
|
|
@@ -3456,6 +3484,9 @@ function createTask(options) {
|
|
|
3456
3484
|
}, (tldrInfo) => {
|
|
3457
3485
|
customTldr = tldrInfo;
|
|
3458
3486
|
updatedAt = new Date();
|
|
3487
|
+
}, (llmCall) => {
|
|
3488
|
+
llmCalls.push(llmCall);
|
|
3489
|
+
updatedAt = new Date();
|
|
3459
3490
|
});
|
|
3460
3491
|
finalResultPromise
|
|
3461
3492
|
.catch((error) => {
|
|
@@ -3578,7 +3609,7 @@ function createTask(options) {
|
|
|
3578
3609
|
}
|
|
3579
3610
|
return {
|
|
3580
3611
|
percent: percent,
|
|
3581
|
-
message,
|
|
3612
|
+
message: message + ' (!!!fallback)',
|
|
3582
3613
|
};
|
|
3583
3614
|
},
|
|
3584
3615
|
get createdAt() {
|
|
@@ -3601,6 +3632,10 @@ function createTask(options) {
|
|
|
3601
3632
|
return warnings;
|
|
3602
3633
|
// <- Note: [1] --||--
|
|
3603
3634
|
},
|
|
3635
|
+
get llmCalls() {
|
|
3636
|
+
return [...llmCalls, { foo: '!!! bar' }];
|
|
3637
|
+
// <- Note: [1] --||--
|
|
3638
|
+
},
|
|
3604
3639
|
get currentValue() {
|
|
3605
3640
|
return currentValue;
|
|
3606
3641
|
// <- Note: [1] --||--
|
|
@@ -3877,14 +3912,14 @@ class MultipleLlmExecutionTools {
|
|
|
3877
3912
|
if (description === undefined) {
|
|
3878
3913
|
return headLine;
|
|
3879
3914
|
}
|
|
3880
|
-
return spaceTrim((block) => `
|
|
3915
|
+
return spaceTrim$2((block) => `
|
|
3881
3916
|
${headLine}
|
|
3882
3917
|
|
|
3883
3918
|
${ /* <- Note: Indenting the description: */block(description)}
|
|
3884
3919
|
`);
|
|
3885
3920
|
})
|
|
3886
3921
|
.join('\n\n');
|
|
3887
|
-
return spaceTrim((block) => `
|
|
3922
|
+
return spaceTrim$2((block) => `
|
|
3888
3923
|
Multiple LLM Providers:
|
|
3889
3924
|
|
|
3890
3925
|
${block(innerModelsTitlesAndDescriptions)}
|
|
@@ -3975,7 +4010,7 @@ class MultipleLlmExecutionTools {
|
|
|
3975
4010
|
// 1) OpenAI throw PipelineExecutionError: Parameter `{knowledge}` is not defined
|
|
3976
4011
|
// 2) AnthropicClaude throw PipelineExecutionError: Parameter `{knowledge}` is not defined
|
|
3977
4012
|
// 3) ...
|
|
3978
|
-
spaceTrim((block) => `
|
|
4013
|
+
spaceTrim$2((block) => `
|
|
3979
4014
|
All execution tools of ${this.title} failed:
|
|
3980
4015
|
|
|
3981
4016
|
${block(errors
|
|
@@ -3988,7 +4023,7 @@ class MultipleLlmExecutionTools {
|
|
|
3988
4023
|
throw new PipelineExecutionError(`You have not provided any \`LlmExecutionTools\` into ${this.title}`);
|
|
3989
4024
|
}
|
|
3990
4025
|
else {
|
|
3991
|
-
throw new PipelineExecutionError(spaceTrim((block) => `
|
|
4026
|
+
throw new PipelineExecutionError(spaceTrim$2((block) => `
|
|
3992
4027
|
You have not provided any \`LlmExecutionTools\` that support model variant "${prompt.modelRequirements.modelVariant}" into ${this.title}
|
|
3993
4028
|
|
|
3994
4029
|
Available \`LlmExecutionTools\`:
|
|
@@ -4021,7 +4056,7 @@ class MultipleLlmExecutionTools {
|
|
|
4021
4056
|
*/
|
|
4022
4057
|
function joinLlmExecutionTools(title, ...llmExecutionTools) {
|
|
4023
4058
|
if (llmExecutionTools.length === 0) {
|
|
4024
|
-
const warningMessage = spaceTrim(`
|
|
4059
|
+
const warningMessage = spaceTrim$2(`
|
|
4025
4060
|
You have not provided any \`LlmExecutionTools\`
|
|
4026
4061
|
This means that you won't be able to execute any prompts that require large language models like GPT-4 or Anthropic's Claude.
|
|
4027
4062
|
|
|
@@ -4054,6 +4089,7 @@ function joinLlmExecutionTools(title, ...llmExecutionTools) {
|
|
|
4054
4089
|
return new MultipleLlmExecutionTools(title || 'Multiple LLM Providers joined by `joinLlmExecutionTools`', ...llmExecutionTools);
|
|
4055
4090
|
}
|
|
4056
4091
|
/**
|
|
4092
|
+
* TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
|
|
4057
4093
|
* TODO: [👷♂️] @@@ Manual about construction of llmTools
|
|
4058
4094
|
*/
|
|
4059
4095
|
|
|
@@ -4070,6 +4106,7 @@ function getSingleLlmExecutionTools(oneOrMoreLlmExecutionTools) {
|
|
|
4070
4106
|
return llmTools;
|
|
4071
4107
|
}
|
|
4072
4108
|
/**
|
|
4109
|
+
* TODO: [🙆] `getSingleLlmExecutionTools` vs `joinLlmExecutionTools` - explain difference or pick one
|
|
4073
4110
|
* TODO: [👷♂️] @@@ Manual about construction of llmTools
|
|
4074
4111
|
*/
|
|
4075
4112
|
|
|
@@ -4085,7 +4122,7 @@ async function preparePersona(personaDescription, tools, options) {
|
|
|
4085
4122
|
throw new MissingToolsError('LLM tools are required for preparing persona');
|
|
4086
4123
|
}
|
|
4087
4124
|
// TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
|
|
4088
|
-
const collection =
|
|
4125
|
+
const collection = createPipelineCollectionFromJson(...PipelineCollection);
|
|
4089
4126
|
const preparePersonaExecutor = createPipelineExecutor({
|
|
4090
4127
|
pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-persona.book'),
|
|
4091
4128
|
tools,
|
|
@@ -4336,14 +4373,14 @@ function $registeredScrapersMessage(availableScrapers) {
|
|
|
4336
4373
|
return { ...metadata, isMetadataAviailable, isInstalled, isAvailableInTools };
|
|
4337
4374
|
});
|
|
4338
4375
|
if (metadata.length === 0) {
|
|
4339
|
-
return spaceTrim(`
|
|
4376
|
+
return spaceTrim$2(`
|
|
4340
4377
|
**No scrapers are available**
|
|
4341
4378
|
|
|
4342
4379
|
This is a unexpected behavior, you are probably using some broken version of Promptbook
|
|
4343
4380
|
At least there should be available the metadata of the scrapers
|
|
4344
4381
|
`);
|
|
4345
4382
|
}
|
|
4346
|
-
return spaceTrim((block) => `
|
|
4383
|
+
return spaceTrim$2((block) => `
|
|
4347
4384
|
Available scrapers are:
|
|
4348
4385
|
${block(metadata
|
|
4349
4386
|
.map(({ packageName, className, isMetadataAviailable, isInstalled, mimeTypes, isAvailableInBrowser, isAvailableInTools, }, i) => {
|
|
@@ -4454,7 +4491,7 @@ const promptbookFetch = async (urlOrRequest, init) => {
|
|
|
4454
4491
|
else if (urlOrRequest instanceof Request) {
|
|
4455
4492
|
url = urlOrRequest.url;
|
|
4456
4493
|
}
|
|
4457
|
-
throw new PromptbookFetchError(spaceTrim((block) => `
|
|
4494
|
+
throw new PromptbookFetchError(spaceTrim$2((block) => `
|
|
4458
4495
|
Can not fetch "${url}"
|
|
4459
4496
|
|
|
4460
4497
|
Fetch error:
|
|
@@ -4615,7 +4652,7 @@ async function makeKnowledgeSourceHandler(knowledgeSource, tools, options) {
|
|
|
4615
4652
|
const fileExtension = getFileExtension(filename);
|
|
4616
4653
|
const mimeType = extensionToMimeType(fileExtension || '');
|
|
4617
4654
|
if (!(await isFileExisting(filename, tools.fs))) {
|
|
4618
|
-
throw new NotFoundError(spaceTrim((block) => `
|
|
4655
|
+
throw new NotFoundError(spaceTrim$2((block) => `
|
|
4619
4656
|
Can not make source handler for file which does not exist:
|
|
4620
4657
|
|
|
4621
4658
|
File:
|
|
@@ -4708,7 +4745,7 @@ async function prepareKnowledgePieces(knowledgeSources, tools, options) {
|
|
|
4708
4745
|
// <- TODO: [🪓] Here should be no need for spreading new array, just `partialPieces = partialPiecesUnchecked`
|
|
4709
4746
|
break;
|
|
4710
4747
|
}
|
|
4711
|
-
console.warn(spaceTrim((block) => `
|
|
4748
|
+
console.warn(spaceTrim$2((block) => `
|
|
4712
4749
|
Cannot scrape knowledge from source despite the scraper \`${scraper.metadata.className}\` supports the mime type "${sourceHandler.mimeType}".
|
|
4713
4750
|
|
|
4714
4751
|
The source:
|
|
@@ -4724,7 +4761,7 @@ async function prepareKnowledgePieces(knowledgeSources, tools, options) {
|
|
|
4724
4761
|
// <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
|
|
4725
4762
|
}
|
|
4726
4763
|
if (partialPieces === null) {
|
|
4727
|
-
throw new KnowledgeScrapeError(spaceTrim((block) => `
|
|
4764
|
+
throw new KnowledgeScrapeError(spaceTrim$2((block) => `
|
|
4728
4765
|
Cannot scrape knowledge
|
|
4729
4766
|
|
|
4730
4767
|
The source:
|
|
@@ -4889,7 +4926,7 @@ async function preparePipeline(pipeline, tools, options) {
|
|
|
4889
4926
|
let title = pipeline.title;
|
|
4890
4927
|
if (title === undefined || title === '' || title === DEFAULT_BOOK_TITLE) {
|
|
4891
4928
|
// TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
|
|
4892
|
-
const collection =
|
|
4929
|
+
const collection = createPipelineCollectionFromJson(...PipelineCollection);
|
|
4893
4930
|
const prepareTitleExecutor = createPipelineExecutor({
|
|
4894
4931
|
pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-title.book'),
|
|
4895
4932
|
tools,
|
|
@@ -5299,7 +5336,7 @@ const CsvFormatParser = {
|
|
|
5299
5336
|
const { value, outputParameterName, settings, mapCallback, onProgress } = options;
|
|
5300
5337
|
const csv = csvParse(value, settings);
|
|
5301
5338
|
if (csv.errors.length !== 0) {
|
|
5302
|
-
throw new CsvFormatError(spaceTrim((block) => `
|
|
5339
|
+
throw new CsvFormatError(spaceTrim$2((block) => `
|
|
5303
5340
|
CSV parsing error
|
|
5304
5341
|
|
|
5305
5342
|
Error(s) from CSV parsing:
|
|
@@ -5344,7 +5381,7 @@ const CsvFormatParser = {
|
|
|
5344
5381
|
const { value, settings, mapCallback, onProgress } = options;
|
|
5345
5382
|
const csv = csvParse(value, settings);
|
|
5346
5383
|
if (csv.errors.length !== 0) {
|
|
5347
|
-
throw new CsvFormatError(spaceTrim((block) => `
|
|
5384
|
+
throw new CsvFormatError(spaceTrim$2((block) => `
|
|
5348
5385
|
CSV parsing error
|
|
5349
5386
|
|
|
5350
5387
|
Error(s) from CSV parsing:
|
|
@@ -5554,7 +5591,7 @@ function mapAvailableToExpectedParameters(options) {
|
|
|
5554
5591
|
}
|
|
5555
5592
|
// Phase 2️⃣: Non-matching mapping
|
|
5556
5593
|
if (expectedParameterNames.size !== availableParametersNames.size) {
|
|
5557
|
-
throw new PipelineExecutionError(spaceTrim((block) => `
|
|
5594
|
+
throw new PipelineExecutionError(spaceTrim$2((block) => `
|
|
5558
5595
|
Can not map available parameters to expected parameters
|
|
5559
5596
|
|
|
5560
5597
|
Mapped parameters:
|
|
@@ -5801,10 +5838,13 @@ const LINES_PER_STANDARD_PAGE = 44;
|
|
|
5801
5838
|
* @public exported from `@promptbook/utils`
|
|
5802
5839
|
*/
|
|
5803
5840
|
function countLines(text) {
|
|
5841
|
+
if (text === '') {
|
|
5842
|
+
return 0;
|
|
5843
|
+
}
|
|
5804
5844
|
text = text.replace('\r\n', '\n');
|
|
5805
5845
|
text = text.replace('\r', '\n');
|
|
5806
5846
|
const lines = text.split('\n');
|
|
5807
|
-
return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
|
|
5847
|
+
return lines.reduce((count, line) => count + Math.max(Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 1), 0);
|
|
5808
5848
|
}
|
|
5809
5849
|
/**
|
|
5810
5850
|
* TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
|
|
@@ -5929,6 +5969,8 @@ function checkExpectations(expectations, value) {
|
|
|
5929
5969
|
* This function provides a common abstraction for result validation that can be used
|
|
5930
5970
|
* by both execution logic and caching logic to ensure consistency.
|
|
5931
5971
|
*
|
|
5972
|
+
* Note: [🔂] This function is idempotent.
|
|
5973
|
+
*
|
|
5932
5974
|
* @param options - The validation options including result string, expectations, and format
|
|
5933
5975
|
* @returns Validation result with processed string and validity status
|
|
5934
5976
|
* @private internal function of `createPipelineExecutor` and `cacheLlmTools`
|
|
@@ -5997,7 +6039,7 @@ function validatePromptResult(options) {
|
|
|
5997
6039
|
*/
|
|
5998
6040
|
async function executeAttempts(options) {
|
|
5999
6041
|
const { jokerParameterNames, priority, maxAttempts, // <- Note: [💂]
|
|
6000
|
-
preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, } = options;
|
|
6042
|
+
preparedContent, parameters, task, preparedPipeline, tools, $executionReport, pipelineIdentification, maxExecutionAttempts, onProgress, logLlmCall, } = options;
|
|
6001
6043
|
const $ongoingTaskResult = {
|
|
6002
6044
|
$result: null,
|
|
6003
6045
|
$resultString: null,
|
|
@@ -6245,14 +6287,10 @@ async function executeAttempts(options) {
|
|
|
6245
6287
|
});
|
|
6246
6288
|
}
|
|
6247
6289
|
finally {
|
|
6248
|
-
if (!isJokerAttempt &&
|
|
6249
|
-
|
|
6250
|
-
|
|
6251
|
-
|
|
6252
|
-
// In that case we don’t want to make a report about it because it’s not a llm execution error
|
|
6253
|
-
) {
|
|
6254
|
-
// TODO: [🧠] Maybe put other taskTypes into report
|
|
6255
|
-
$executionReport.promptExecutions.push({
|
|
6290
|
+
if (!isJokerAttempt && task.taskType === 'PROMPT_TASK' && $ongoingTaskResult.$prompt) {
|
|
6291
|
+
// Note: [2] When some expected parameter is not defined, error will occur in templateParameters
|
|
6292
|
+
// In that case we don’t want to make a report about it because it’s not a llm execution error
|
|
6293
|
+
const executionPromptReport = {
|
|
6256
6294
|
prompt: {
|
|
6257
6295
|
...$ongoingTaskResult.$prompt,
|
|
6258
6296
|
// <- TODO: [🧠] How to pick everyhing except `pipelineUrl`
|
|
@@ -6261,7 +6299,14 @@ async function executeAttempts(options) {
|
|
|
6261
6299
|
error: $ongoingTaskResult.$expectError === null
|
|
6262
6300
|
? undefined
|
|
6263
6301
|
: serializeError($ongoingTaskResult.$expectError),
|
|
6264
|
-
}
|
|
6302
|
+
};
|
|
6303
|
+
$executionReport.promptExecutions.push(executionPromptReport);
|
|
6304
|
+
if (logLlmCall) {
|
|
6305
|
+
logLlmCall({
|
|
6306
|
+
modelName: 'model' /* <- TODO: How to get model name from the report */,
|
|
6307
|
+
report: executionPromptReport,
|
|
6308
|
+
});
|
|
6309
|
+
}
|
|
6265
6310
|
}
|
|
6266
6311
|
}
|
|
6267
6312
|
if ($ongoingTaskResult.$expectError !== null && attemptIndex === maxAttempts - 1) {
|
|
@@ -6326,12 +6371,12 @@ async function executeAttempts(options) {
|
|
|
6326
6371
|
* @private internal utility of `createPipelineExecutor`
|
|
6327
6372
|
*/
|
|
6328
6373
|
async function executeFormatSubvalues(options) {
|
|
6329
|
-
const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, pipelineIdentification } = options;
|
|
6374
|
+
const { task, jokerParameterNames, parameters, priority, csvSettings, onProgress, logLlmCall, pipelineIdentification, } = options;
|
|
6330
6375
|
if (task.foreach === undefined) {
|
|
6331
|
-
return /* not await */ executeAttempts(options);
|
|
6376
|
+
return /* not await */ executeAttempts({ ...options, logLlmCall });
|
|
6332
6377
|
}
|
|
6333
6378
|
if (jokerParameterNames.length !== 0) {
|
|
6334
|
-
throw new UnexpectedError(spaceTrim((block) => `
|
|
6379
|
+
throw new UnexpectedError(spaceTrim$2((block) => `
|
|
6335
6380
|
JOKER parameters are not supported together with FOREACH command
|
|
6336
6381
|
|
|
6337
6382
|
[🧞♀️] This should be prevented in \`validatePipeline\`
|
|
@@ -6344,7 +6389,7 @@ async function executeFormatSubvalues(options) {
|
|
|
6344
6389
|
if (formatDefinition === undefined) {
|
|
6345
6390
|
throw new UnexpectedError(
|
|
6346
6391
|
// <- TODO: [🧠][🧐] Should be formats fixed per promptbook version or behave as plugins (=> change UnexpectedError)
|
|
6347
|
-
spaceTrim((block) => `
|
|
6392
|
+
spaceTrim$2((block) => `
|
|
6348
6393
|
Unsupported format "${task.foreach.formatName}"
|
|
6349
6394
|
|
|
6350
6395
|
Available formats:
|
|
@@ -6361,7 +6406,7 @@ async function executeFormatSubvalues(options) {
|
|
|
6361
6406
|
if (subvalueParser === undefined) {
|
|
6362
6407
|
throw new UnexpectedError(
|
|
6363
6408
|
// <- TODO: [🧠][🧐] Should be formats fixed per promptbook version or behave as plugins (=> change UnexpectedError)
|
|
6364
|
-
spaceTrim((block) => `
|
|
6409
|
+
spaceTrim$2((block) => `
|
|
6365
6410
|
Unsupported subformat name "${task.foreach.subformatName}" for format "${task.foreach.formatName}"
|
|
6366
6411
|
|
|
6367
6412
|
Available subformat names for format "${formatDefinition.formatName}":
|
|
@@ -6401,7 +6446,7 @@ async function executeFormatSubvalues(options) {
|
|
|
6401
6446
|
if (!(error instanceof PipelineExecutionError)) {
|
|
6402
6447
|
throw error;
|
|
6403
6448
|
}
|
|
6404
|
-
const highLevelError = new PipelineExecutionError(spaceTrim((block) => `
|
|
6449
|
+
const highLevelError = new PipelineExecutionError(spaceTrim$2((block) => `
|
|
6405
6450
|
${error.message}
|
|
6406
6451
|
|
|
6407
6452
|
This is error in FOREACH command when mapping ${formatDefinition.formatName} ${subvalueParser.subvalueName} data (${index + 1}/${length})
|
|
@@ -6425,7 +6470,7 @@ async function executeFormatSubvalues(options) {
|
|
|
6425
6470
|
...options,
|
|
6426
6471
|
priority: priority + index,
|
|
6427
6472
|
parameters: allSubparameters,
|
|
6428
|
-
pipelineIdentification: spaceTrim((block) => `
|
|
6473
|
+
pipelineIdentification: spaceTrim$2((block) => `
|
|
6429
6474
|
${block(pipelineIdentification)}
|
|
6430
6475
|
Subparameter index: ${index}
|
|
6431
6476
|
`),
|
|
@@ -6434,7 +6479,7 @@ async function executeFormatSubvalues(options) {
|
|
|
6434
6479
|
}
|
|
6435
6480
|
catch (error) {
|
|
6436
6481
|
if (length > BIG_DATASET_TRESHOLD) {
|
|
6437
|
-
console.error(spaceTrim((block) => `
|
|
6482
|
+
console.error(spaceTrim$2((block) => `
|
|
6438
6483
|
${error.message}
|
|
6439
6484
|
|
|
6440
6485
|
This is error in FOREACH command when processing ${formatDefinition.formatName} ${subvalueParser.subvalueName} data (${index + 1}/${length})
|
|
@@ -6534,7 +6579,7 @@ async function getKnowledgeForTask(options) {
|
|
|
6534
6579
|
},
|
|
6535
6580
|
content: task.content,
|
|
6536
6581
|
parameters,
|
|
6537
|
-
};
|
|
6582
|
+
}; /* <- Note: [🤛] */
|
|
6538
6583
|
const taskEmbeddingResult = await llmTools.callEmbeddingModel(taskEmbeddingPrompt);
|
|
6539
6584
|
const knowledgePiecesWithRelevance = preparedPipeline.knowledgePieces.map((knowledgePiece) => {
|
|
6540
6585
|
const { index } = knowledgePiece;
|
|
@@ -6629,7 +6674,7 @@ async function getReservedParametersForTask(options) {
|
|
|
6629
6674
|
* @private internal utility of `createPipelineExecutor`
|
|
6630
6675
|
*/
|
|
6631
6676
|
async function executeTask(options) {
|
|
6632
|
-
const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
|
|
6677
|
+
const { currentTask, preparedPipeline, parametersToPass, tools, onProgress, logLlmCall, $executionReport, pipelineIdentification, maxExecutionAttempts, maxParallelCount, csvSettings, isVerbose, rootDirname, cacheDirname, intermediateFilesStrategy, isAutoInstalled, isNotPreparedWarningSuppressed, } = options;
|
|
6633
6678
|
const priority = preparedPipeline.tasks.length - preparedPipeline.tasks.indexOf(currentTask);
|
|
6634
6679
|
// Note: Check consistency of used and dependent parameters which was also done in `validatePipeline`, but it’s good to doublecheck
|
|
6635
6680
|
const usedParameterNames = extractParameterNamesFromTask(currentTask);
|
|
@@ -6708,6 +6753,7 @@ async function executeTask(options) {
|
|
|
6708
6753
|
tools,
|
|
6709
6754
|
$executionReport,
|
|
6710
6755
|
onProgress,
|
|
6756
|
+
logLlmCall,
|
|
6711
6757
|
pipelineIdentification,
|
|
6712
6758
|
maxExecutionAttempts,
|
|
6713
6759
|
maxParallelCount,
|
|
@@ -6751,6 +6797,29 @@ function filterJustOutputParameters(options) {
|
|
|
6751
6797
|
$warnings.push(new PipelineExecutionError(spaceTrim$1((block) => `
|
|
6752
6798
|
Parameter \`{${parameter.name}}\` should be an output parameter, but it was not generated during pipeline execution
|
|
6753
6799
|
|
|
6800
|
+
Note: This is a warning which happened after the pipeline was executed, and \`{${parameter.name}}\` was not for some reason defined in output parameters
|
|
6801
|
+
|
|
6802
|
+
All parameters:
|
|
6803
|
+
${block(preparedPipeline.parameters
|
|
6804
|
+
.map(({ name, isInput, isOutput, description }) => {
|
|
6805
|
+
let line = `\`{${name}}\``;
|
|
6806
|
+
if (isInput) {
|
|
6807
|
+
line += ' `[input parameter]`';
|
|
6808
|
+
}
|
|
6809
|
+
if (isOutput) {
|
|
6810
|
+
line += ' `[output parameter]`';
|
|
6811
|
+
}
|
|
6812
|
+
if (parametersToPass[name] === undefined) {
|
|
6813
|
+
line += ` <- Warning: Should be in the output but its not |`;
|
|
6814
|
+
}
|
|
6815
|
+
if (description) {
|
|
6816
|
+
line += ` ${description}`;
|
|
6817
|
+
}
|
|
6818
|
+
return line;
|
|
6819
|
+
})
|
|
6820
|
+
.map((line, index) => `${index + 1}) ${line}`)
|
|
6821
|
+
.join('\n'))}
|
|
6822
|
+
|
|
6754
6823
|
${block(pipelineIdentification)}
|
|
6755
6824
|
`)));
|
|
6756
6825
|
continue;
|
|
@@ -6771,7 +6840,7 @@ function filterJustOutputParameters(options) {
|
|
|
6771
6840
|
* @private internal utility of `createPipelineExecutor`
|
|
6772
6841
|
*/
|
|
6773
6842
|
async function executePipeline(options) {
|
|
6774
|
-
const { inputParameters, tools, onProgress, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
|
|
6843
|
+
const { inputParameters, tools, onProgress, logLlmCall, pipeline, setPreparedPipeline, pipelineIdentification, maxParallelCount, rootDirname, isVerbose, } = options;
|
|
6775
6844
|
let { preparedPipeline } = options;
|
|
6776
6845
|
if (preparedPipeline === undefined) {
|
|
6777
6846
|
preparedPipeline = await preparePipeline(pipeline, tools, {
|
|
@@ -6949,6 +7018,7 @@ async function executePipeline(options) {
|
|
|
6949
7018
|
onProgress(newOngoingResult);
|
|
6950
7019
|
}
|
|
6951
7020
|
},
|
|
7021
|
+
logLlmCall,
|
|
6952
7022
|
$executionReport: executionReport,
|
|
6953
7023
|
pipelineIdentification: spaceTrim$1((block) => `
|
|
6954
7024
|
${block(pipelineIdentification)}
|
|
@@ -7072,7 +7142,7 @@ function createPipelineExecutor(options) {
|
|
|
7072
7142
|
// <- TODO: [🏮] Some standard way how to transform errors into warnings and how to handle non-critical fails during the tasks
|
|
7073
7143
|
}
|
|
7074
7144
|
let runCount = 0;
|
|
7075
|
-
const pipelineExecutorWithCallback = async (inputParameters, onProgress) => {
|
|
7145
|
+
const pipelineExecutorWithCallback = async (inputParameters, onProgress, logLlmCall) => {
|
|
7076
7146
|
runCount++;
|
|
7077
7147
|
return /* not await */ executePipeline({
|
|
7078
7148
|
pipeline,
|
|
@@ -7083,6 +7153,7 @@ function createPipelineExecutor(options) {
|
|
|
7083
7153
|
inputParameters,
|
|
7084
7154
|
tools,
|
|
7085
7155
|
onProgress,
|
|
7156
|
+
logLlmCall,
|
|
7086
7157
|
pipelineIdentification: spaceTrim$1((block) => `
|
|
7087
7158
|
${block(pipelineIdentification)}
|
|
7088
7159
|
${runCount === 1 ? '' : `Run #${runCount}`}
|
|
@@ -7244,7 +7315,7 @@ class MarkdownScraper {
|
|
|
7244
7315
|
}
|
|
7245
7316
|
const llmTools = getSingleLlmExecutionTools(llm);
|
|
7246
7317
|
// TODO: [🌼] In future use `ptbk make` and made getPipelineCollection
|
|
7247
|
-
const collection =
|
|
7318
|
+
const collection = createPipelineCollectionFromJson(...PipelineCollection);
|
|
7248
7319
|
const prepareKnowledgeFromMarkdownExecutor = createPipelineExecutor({
|
|
7249
7320
|
pipeline: await collection.getPipelineByUrl('https://promptbook.studio/promptbook/prepare-knowledge-from-markdown.book'),
|
|
7250
7321
|
tools: {
|
|
@@ -7280,8 +7351,8 @@ class MarkdownScraper {
|
|
|
7280
7351
|
knowledgeTextPieces.map(async (knowledgeTextPiece, i) => {
|
|
7281
7352
|
// Note: These are just default values, they will be overwritten by the actual values:
|
|
7282
7353
|
let name = `piece-${i}`;
|
|
7283
|
-
let title = spaceTrim(knowledgeTextPiece.substring(0, 100));
|
|
7284
|
-
const knowledgePieceContent = spaceTrim(knowledgeTextPiece);
|
|
7354
|
+
let title = spaceTrim$2(knowledgeTextPiece.substring(0, 100));
|
|
7355
|
+
const knowledgePieceContent = spaceTrim$2(knowledgeTextPiece);
|
|
7285
7356
|
let keywords = [];
|
|
7286
7357
|
const index = [];
|
|
7287
7358
|
/*
|
|
@@ -7294,7 +7365,7 @@ class MarkdownScraper {
|
|
|
7294
7365
|
isCrashedOnError: true,
|
|
7295
7366
|
});
|
|
7296
7367
|
const { title: titleRaw = 'Untitled' } = titleResult.outputParameters;
|
|
7297
|
-
title = spaceTrim(titleRaw) /* <- TODO: Maybe do in pipeline */;
|
|
7368
|
+
title = spaceTrim$2(titleRaw) /* <- TODO: Maybe do in pipeline */;
|
|
7298
7369
|
name = titleToName(title);
|
|
7299
7370
|
// --- Keywords
|
|
7300
7371
|
const keywordsResult = await prepareKeywordsExecutor({ knowledgePieceContent }).asPromise({
|