Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
@promptbook/azure-openai
Advanced tools
Supercharge your use of large language models
@promptbook/azure-openai
@promptbook/azure-openai
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 i @promptbook/azure-openai
@promptbook/azure-openai
integrates Azure OpenAI API with Promptbook. It allows to execute Promptbooks with Azure OpenAI GPT models.
Note: This is similar to @promptbook/openai but more useful for Enterprise customers who use Azure OpenAI to ensure strict data privacy and compliance.
import { createPipelineExecutor, assertsExecutionSuccessful } from '@promptbook/core';
import { createCollectionFromDirectory } from '@promptbook/node';
import { JavascriptExecutionTools } from '@promptbook/execute-javascript';
import { AzureOpenAiExecutionTools } from '@promptbook/azure-openai';
// โถ Create whole pipeline collection
const collection = await createCollectionFromDirectory('./promptbook-collection');
// โถ Get single Pipeline
const pipeline = await collection.getPipelineByUrl(`https://promptbook.studio/my-collection/write-article.ptbk.md`);
// โถ Prepare tools
const tools = {
llm: new AzureOpenAiExecutionTools(
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
{
isVerbose: true,
resourceName: process.env.AZUREOPENAI_RESOURCE_NAME,
deploymentName: process.env.AZUREOPENAI_DEPLOYMENT_NAME,
apiKey: process.env.AZUREOPENAI_API_KEY,
},
),
script: [
new JavascriptExecutionTools(),
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
],
};
// โถ Create executor - the function that will execute the Pipeline
const pipelineExecutor = createPipelineExecutor({ pipeline, tools });
// โถ Prepare input parameters
const inputParameters = { word: 'crocodile' };
// ๐โถ Execute the Pipeline
const result = await pipelineExecutor(inputParameters);
// โถ Fail if the execution was not successful
assertsExecutionSuccessful(result);
// โถ Handle the result
const { isSuccessful, errors, outputParameters, executionReport } = result;
console.info(outputParameters);
You can use multiple LLM providers in one Promptbook execution. The best model will be chosen automatically according to the prompt and the model's capabilities.
import { createPipelineExecutor, assertsExecutionSuccessful } from '@promptbook/core';
import { createCollectionFromDirectory } from '@promptbook/node';
import { JavascriptExecutionTools } from '@promptbook/execute-javascript';
import { AzureOpenAiExecutionTools } from '@promptbook/azure-openai';
import { OpenAiExecutionTools } from '@promptbook/openai';
import { AnthropicClaudeExecutionTools } from '@promptbook/anthropic-claude';
// โถ Create whole pipeline collection
const collection = await createCollectionFromDirectory('./promptbook-collection');
// โถ Get single Pipeline
const pipeline = await collection.getPipelineByUrl(`https://promptbook.studio/my-collection/write-article.ptbk.md`);
// โถ Prepare multiple tools
const tools = {
llm: [
// Note: You can use multiple LLM providers in one Promptbook execution.
// The best model will be chosen automatically according to the prompt and the model's capabilities.
new AzureOpenAiExecutionTools(
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
{
resourceName: process.env.AZUREOPENAI_RESOURCE_NAME,
deploymentName: process.env.AZUREOPENAI_DEPLOYMENT_NAME,
apiKey: process.env.AZUREOPENAI_API_KEY,
},
),
new OpenAiExecutionTools(
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
{
apiKey: process.env.OPENAI_API_KEY,
},
),
new AnthropicClaudeExecutionTools(
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
{
apiKey: process.env.ANTHROPIC_CLAUDE_API_KEY,
},
),
],
script: [
new JavascriptExecutionTools(),
// <- TODO: [๐งฑ] Implement in a functional (not new Class) way
],
};
// โถ Create executor - the function that will execute the Pipeline
const pipelineExecutor = createPipelineExecutor({ pipeline, tools });
// โถ Prepare input parameters
const inputParameters = { word: 'snake' };
// ๐โถ Execute the Pipeline
const result = await pipelineExecutor(inputParameters);
// โถ Fail if the execution was not successful
assertsExecutionSuccessful(result);
// โถ Handle the result
const { isSuccessful, errors, outputParameters, executionReport } = result;
console.info(outputParameters);
See the other models available in the Promptbook package:
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
- PROMPTBOOK VERSION 0.0.1
- 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.
Different levels of abstraction. OpenAI library is for direct use of OpenAI API. This library is for a higher level of abstraction. It define pipelines that are independent of the underlying library, LLM model, or even LLM provider.
Langchain is primarily aimed at ML developers working in Python. This library is for developers working in javascript/typescript and creating applications for end users.
We are considering creating a bridge/converter between these two libraries.
GPTs are chat assistants that can be assigned to specific tasks and materials. But they are still chat assistants. Promptbooks are a way to orchestrate many more predefined tasks to have much tighter control over the process. Promptbooks are not a good technology for creating human-like chatbots, GPTs are not a good technology for creating outputs with specific requirements.
If you use raw SDKs, you just put prompts in the sourcecode, mixed in with typescript, javascript, python or whatever programming language you use.
If you use promptbooks, you can store them in several places, each with its own advantages and disadvantages:
As source code, typically git-committed. In this case you can use the versioning system and the promptbooks will be tightly coupled with the version of the application. You still get the power of promptbooks, as you separate the concerns of the prompt-engineer and the programmer.
As data in a database In this case, promptbooks are like posts / articles on the blog. They can be modified independently of the application. You don't need to redeploy the application to change the promptbooks. You can have multiple versions of promptbooks for each user. You can have a web interface for non-programmers to create and modify promptbooks. But you lose the versioning system and you still have to consider the interface between the promptbooks and the application (= input and output parameters).
In a configuration in environment variables. This is a good way to store promptbooks if you have an application with multiple deployments and you want to have different but simple promptbooks for each deployment and you don't need to change them often.
A single promptbook can be written for several (human) languages at once. However, we recommend that you have separate promptbooks for each language.
In large language models, you will get better results if you have prompts in the same language as the user input.
The best way to manage this is to have suffixed promptbooks like write-website-content.en.ptbk.md
and write-website-content.cs.ptbk.md
for each supported language.
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
It's time for a paradigm shift. The future of software in plain English, French or Latin
We found that @promptbook/azure-openai 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
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socketโs threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.