Security News
NVD Backlog Tops 20,000 CVEs Awaiting Analysis as NIST Prepares System Updates
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
@promptbook/utils
Advanced tools
Supercharge your use of large language models
@promptbook/utils
@promptbook/utils
is one part of the promptbook ecosystem.To install this package, run:
# Install entire promptbook ecosystem
npm i ptbk
# Install just this package to save space
npm install @promptbook/utils
Utility functions used in the library but also useful for individual use in preprocessing and postprocessing LLM inputs and outputs
Here is a overview of the functions which are exported from the @promptbook/utils
package and can be used in your own projects:
Sometimes you need to postprocess the output of the LLM model, every postprocessing function that is available through POSTPROCESS
command in promptbook is exported from @promptbook/utils
. You can use:
spaceTrim
extractAllBlocksFromMarkdown
, <- Note: Exported from @promptbook/markdown-utils
extractAllListItemsFromMarkdown
<- Note: Exported from @promptbook/markdown-utils
extractBlock
extractOneBlockFromMarkdown
<- Note: Exported from @promptbook/markdown-utils
prettifyPipelineString
removeContentComments
removeEmojis
removeMarkdownFormatting
<- Note: Exported from @promptbook/markdown-utils
removeQuotes
trimCodeBlock
trimEndOfCodeBlock
unwrapResult
Very often you will use unwrapResult
, which is used to extract the result you need from output with some additional information:
import { unwrapResult } from '@promptbook/utils';
unwrapResult('Best greeting for the user is "Hi Pavol!"'); // 'Hi Pavol!'
There is a function replaceParameters
which is used to replace the parameters in given template optimized to LLM prompt templates.
import { replaceParameters } from '@promptbook/utils';
replaceParameters('Hello, {name}!', { name: 'world' }); // 'Hello, world!'
And also multiline templates with blockquotes
import { replaceParameters, spaceTrim } from '@promptbook/utils';
replaceParameters(
spaceTrim(`
Hello, {name}!
> {answer}
`),
{
name: 'world',
answer: spaceTrim(`
I'm fine,
thank you!
And you?
`),
},
);
// Hello, world!
//
// > I'm fine,
// > thank you!
// >
// > And you?
Theese functions are usefull to count stats about the input/output in human-like terms not tokens and bytes, you can use
countCharacters
, countLines
, countPages
, countParagraphs
, countSentences
, countWords
import { countWords } from '@promptbook/utils';
console.log(countWords('Hello, world!')); // 2
Splitting functions are similar to counting but they return the splitted parts of the input/output, you can use
splitIntoCharacters
, splitIntoLines
, splitIntoPages
, splitIntoParagraphs
, splitIntoSentences
, splitIntoWords
import { splitIntoWords } from '@promptbook/utils';
console.log(splitIntoWords('Hello, world!')); // ['Hello', 'world']
Normalization functions are used to put the string into a normalized form, you can use
kebab-case
PascalCase
SCREAMING_CASE
snake_case
kebab-case
import { normalizeTo } from '@promptbook/utils';
console.log(normalizeTo['kebab-case']('Hello, world!')); // 'hello-world'
capitalize
, decapitalize
, removeDiacritics
,...POSTPROCESS
command in promptbookSee also the documentation for all the functions in the @promptbook/utils
package, every function is documented by jsdoc, typed by typescript and tested by jest.
assertsExecutionSuccessful
,
checkExpectations
,
executionReportJsonToString
,
isPassingExpectations
,
isValidJsonString
,
parseNumber
Rest of the documentation is common for entire promptbook ecosystem:
If you have a simple, single prompt for ChatGPT, GPT-4, Anthropic Claude, Google Gemini, Llama 2, or whatever, it doesn't matter how you integrate it. Whether it's calling a REST API directly, using the SDK, hardcoding the prompt into the source code, or importing a text file, the process remains the same.
But often you will struggle with the limitations of LLMs, such as hallucinations, off-topic responses, poor quality output, language drift, word repetition repetition repetition repetition or misuse, lack of context, or just plain w𝒆𝐢rd responses. When this happens, you generally have three options:
In all of these situations, but especially in 3., the Promptbook library can make your life easier.
.ptbk.md
that can be used to describe your prompt business logic without having to write code or deal with the technicalities of LLMs.:)
can't avoid the problems. In this case, the library has built-in anomaly detection and logging to help you find and fix the problems.Prompt book markdown file (or .ptbk.md
file) is document that describes a pipeline - a series of prompts that are chained together to form somewhat reciepe for transforming natural language input.
File write-website-content.ptbk.md
:
🌍 Create website content
Instructions for creating web page content.
- PIPELINE URL https://promptbook.studio/webgpt/write-website-content.ptbk.md
- INPUT PARAM
{rawTitle}
Automatically suggested a site name or empty text- INPUT PARAM
{rawAssigment}
Automatically generated site entry from image recognition- OUTPUT PARAM
{websiteContent}
Web content- OUTPUT PARAM
{keywords}
Keywords👤 Specifying the assigment
What is your web about?
- DIALOG TEMPLATE
{rawAssigment}
-> {assigment}
Website assignment and specification✨ Improving the title
- PERSONA Jane, Copywriter and Marketing Specialist.
As an experienced marketing specialist, you have been entrusted with improving the name of your client's business. A suggested name from a client: "{rawTitle}" Assignment from customer: > {assigment} ## Instructions: - Write only one name suggestion - The name will be used on the website, business cards, visuals, etc.
-> {enhancedTitle}
Enhanced title👤 Website title approval
Is the title for your website okay?
- DIALOG TEMPLATE
{enhancedTitle}
-> {title}
Title for the website🐰 Cunning subtitle
- PERSONA Josh, a copywriter, tasked with creating a claim for the website.
As an experienced copywriter, you have been entrusted with creating a claim for the "{title}" web page. A website assignment from a customer: > {assigment} ## Instructions: - Write only one name suggestion - Claim will be used on website, business cards, visuals, etc. - Claim should be punchy, funny, original
-> {claim}
Claim for the web🚦 Keyword analysis
- PERSONA Paul, extremely creative SEO specialist.
As an experienced SEO specialist, you have been entrusted with creating keywords for the website "{title}". Website assignment from the customer: > {assigment} ## Instructions: - Write a list of keywords - Keywords are in basic form ## Example: - Ice cream - Olomouc - Quality - Family - Tradition - Italy - Craft
-> {keywords}
Keywords🔗 Combine the beginning
- SIMPLE TEMPLATE
# {title} > {claim}
-> {contentBeginning}
Beginning of web content🖋 Write the content
- PERSONA Jane
As an experienced copywriter and web designer, you have been entrusted with creating text for a new website {title}. A website assignment from a customer: > {assigment} ## Instructions: - Text formatting is in Markdown - Be concise and to the point - Use keywords, but they should be naturally in the text - This is the complete content of the page, so don't forget all the important information and elements the page should contain - Use headings, bullets, text formatting ## Keywords: {keywords} ## Web Content: {contentBeginning}
-> {contentBody}
Middle of the web content🔗 Combine the content
- SIMPLE TEMPLATE
{contentBeginning} {contentBody}
-> {websiteContent}
Following is the scheme how the promptbook above is executed:
%% 🔮 Tip: Open this on GitHub or in the VSCode website to see the Mermaid graph visually
flowchart LR
subgraph "🌍 Create website content"
direction TB
input((Input)):::input
templateSpecifyingTheAssigment(👤 Specifying the assigment)
input--"{rawAssigment}"-->templateSpecifyingTheAssigment
templateImprovingTheTitle(✨ Improving the title)
input--"{rawTitle}"-->templateImprovingTheTitle
templateSpecifyingTheAssigment--"{assigment}"-->templateImprovingTheTitle
templateWebsiteTitleApproval(👤 Website title approval)
templateImprovingTheTitle--"{enhancedTitle}"-->templateWebsiteTitleApproval
templateCunningSubtitle(🐰 Cunning subtitle)
templateWebsiteTitleApproval--"{title}"-->templateCunningSubtitle
templateSpecifyingTheAssigment--"{assigment}"-->templateCunningSubtitle
templateKeywordAnalysis(🚦 Keyword analysis)
templateWebsiteTitleApproval--"{title}"-->templateKeywordAnalysis
templateSpecifyingTheAssigment--"{assigment}"-->templateKeywordAnalysis
templateCombineTheBeginning(🔗 Combine the beginning)
templateWebsiteTitleApproval--"{title}"-->templateCombineTheBeginning
templateCunningSubtitle--"{claim}"-->templateCombineTheBeginning
templateWriteTheContent(🖋 Write the content)
templateWebsiteTitleApproval--"{title}"-->templateWriteTheContent
templateSpecifyingTheAssigment--"{assigment}"-->templateWriteTheContent
templateKeywordAnalysis--"{keywords}"-->templateWriteTheContent
templateCombineTheBeginning--"{contentBeginning}"-->templateWriteTheContent
templateCombineTheContent(🔗 Combine the content)
templateCombineTheBeginning--"{contentBeginning}"-->templateCombineTheContent
templateWriteTheContent--"{contentBody}"-->templateCombineTheContent
templateCombineTheContent--"{websiteContent}"-->output
output((Output)):::output
classDef input color: grey;
classDef output color: grey;
end;
Note: We are using postprocessing functions like unwrapResult
that can be used to postprocess the result.
This library is divided into several packages, all are published from single monorepo. You can install all of them at once:
npm i ptbk
Or you can install them separately:
⭐ Marked packages are worth to try first
ptbk
The following glossary is used to clarify certain concepts:
If you have a question start a discussion, open an issue or write me an email.
See CHANGELOG.md
Promptbook by Pavol Hejný is licensed under CC BY 4.0
See TODO.md
I am open to pull requests, feedback, and suggestions. Or if you like this utility, you can ☕ buy me a coffee or donate via cryptocurrencies.
You can also ⭐ star the promptbook package, follow me on GitHub or various other social networks.
FAQs
Supercharge your use of large language models
The npm package @promptbook/utils receives a total of 299,116 weekly downloads. As such, @promptbook/utils popularity was classified as popular.
We found that @promptbook/utils demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
NVD’s backlog surpasses 20,000 CVEs as analysis slows and NIST announces new system updates to address ongoing delays.
Security News
Research
A malicious npm package disguised as a WhatsApp client is exploiting authentication flows with a remote kill switch to exfiltrate data and destroy files.
Security News
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.