Package Exports
- @themaximalist/ai.js
- @themaximalist/ai.js/src/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@themaximalist/ai.js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
AI.js
AI.js is the easiest way to add AI text and image capabilities to your node applications:
await AI("the color of the sky is"); // blue
await AI.Image("a red rose"); // <image buffer: red rose>
await AI.Image.Concept("a red rose"); // <image buffer: a red rose in realist style, watercolor>Under the hood AI.js seamlessly integrates all the best AI APIs:
- Text: OpenAI, Anthropic
- Image: Replicate, StabilityAI
- Music: Coming Soon
- Video: Coming Soon
- Embeddings: Coming Soon
We're constantly looking for new models and APIs to add. In a future update, AI.js will support local models like Stable Diffusion and LLaMA/Alpaca with the same easy-to-use interface.
AI.js is under heavy development and still subject to breaking changes.
Features
- Easy to use
- Best LLM chat completion models (
gpt-3.5-turbo,gpt-4,claude-v1,claude-instant-v1) - Best hosted image generation APIs (
stable-diffusion-xl-beta-v2-2-2, many other Stable Diffusion models) - Same interface across all services
- Streaming is easy as
{stream: true} aiCLI interface in your shell- MIT license
Installation
Install AI.js via npm
npm install @themaximalist/ai.jsEnable at least one service by setting its environment API_KEY
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
export STABILITY_API_KEY=sk-...
export REPLICATE_API_KEY=sk-....Usage
The default interface is text. AI.js lets you send one-off requests or build up complex message histories with the Large Language Model (LLM).
const AI = require("@themaximalist/ai.js");
await AI("what is the codeword?"); // i don't know any codewords
const ai = new AI("the codeword is blue");
await ai.chat("what is the codeword?"); // blueSystem and User Prompts
Giving the LLM a role can help improve performance, this can be done through system and user prompts.
await AI.system("I am HexBot—I generate beautiful hex color schemes", "autumn tree");
// #F2AF80 (soft peach), #E78C4D (burnt orange), #C86018 (rusty red), #5B3B0B (deep brown), #252527 (dark grey)OpenAI has mentioned user prompts may be more strongly enforced than system prompts.
await AI.user("You are HexBot—you generate beautiful hex color schemes", "autumn tree");
// #F2AF80 (soft peach), #E78C4D (burnt orange), #C86018 (rusty red), #5B3B0B (deep brown), #252527 (dark grey)Providing system and user roles can also be used with message history.
const ai = new AI();
ai.system("I am HexBot—I generate beautiful hex color schemes");
await ai.chat("autumn tree");
// #663300 (dark brown), #CC6600 (deep orange), #FF9900 (bright orange), #FFCC00 (golden yellow), #663399 (deep purple)
await ai.chat("make it lighter");
// #885533 (light brown), #FF9933 (pale orange), #FFCC66 ( light orange), #FFEE99 (pale yellow), #9966CC (light purple)Message History
Chat history can build up over time, or you can initialize with an existing history.
await AI([
{ role: "user", content: "remember the secret codeword is blue" },
{ role: "user", content: "what is the secret codeword I just told you?" },
]); // blueOr initialize with an existing history, and continue the conversation.
const ai = new AI([
{ role: "user", content: "remember the secret codeword is blue" },
{ role: "user", content: "what is the secret codeword I just told you?" },
]);
await ai.send(); // blue
await ai.chat("now the codeword is red");
await ai.chat("what is the codeword?"); // redNote: Anthropic's message format is text-based and less convenient, so AI.js uses the OpenAI message format, and it's converted automatically on-the-fly for Anthropic.
Streaming
Streaming is as easy as passing {stream: true} as the second options parameter. A generator is returned that yields the completion tokens in real-time.
const stream = await AI("the color of the sky is", { stream: true });
for await (const message of stream) {
process.stdout.write(message);
}AI() Interface
The AI() interface is the same whether you're using new or await. Also options aim to be the same everywhere you can pass them, and use the most local scope possible, falling back to more global defaults and environment variables when needed.
await|new AI(
string | array,
options = {
service: "openai", // openai, anthropic
model: "gpt-3.5-turbo", // gpt-3.5-turbo, gpt-4, claude-v1, claude-instant-v1
parser: null, // optional content parser or stream parser
stream: false,
context: AI.CONTEXT_FULL, // slices of message history can be sent, but by default send everything
}
);Static Methods
AI.system(prompt, input, option=null)one-time use system promptAI.user(prompt, input, options=null) one-time use user prompt
Instance Methods
ai.send(options=null)send chat completion request to networkai.chat(content, options=null)add user message and send chat completion request to networkai.user(content)add user messageai.system(content)add system messageai.assistant(content)add assistant message
Instance Properties
ai.messages[]message historyai.lastMessagelast message
Image Generation
AI.js provides powerful image generation functions through StabilityAI and Replicate. To get started, make sure you've set the STABILITY_API_KEY or REPLICATE_API_KEY environment variable.
await AI.Image("a red rose"); // <image buffer: red rose>AI.js also provides a concept generator—a way of using chat completion to generate a great image prompt. Using a concept generator can result in significantly better generated images.
await AI.Image.Concept("a red rose"); // <image buffer: a red rose in realist style, watercolor>This hits your LLM provider and generates a complex image prompt before sending it off to the image generation service.
You can also create an AI.Image object to retrieve properties like generated_prompt from AI.Image.Concept.
const image = new AI.Image("a red rose");
await image.concept(); // <image buffer: a red rose in realist style, watercolor>
console.log(image.generated_prompt); // a red rose in the realist style, watercolorAI.Image() Interface
The AI.Image() interface takes an input prompt and a few options.
await|new Image(
string,
options = {
service: "stability", // stability, replicate
model: "stable-diffusion-xl-beta-v2-2-2",
concept_service: "openai", // openai, anthropic
concept_model: "gpt-3.5-turbo", // gpt-3.5-turbo, gpt-4, claude-v1, claude-instant-v1
concept_prompt: "I am Concept2Prompt. My task is to generate rich and dynamic scenes ...",
}
);- Static Methods
Image.Concept(string, options=null)generate a concept and send image completion request to network
- Instance Methods
image.send(options=null)send image completion request to networkimage.concept(prompt, options=null)generate concept prompt and then send image completion request to network
- Instance Properties
image.promptprompt supplied by userimage.generated_promptprompt created fromconcept()serviceimage servicemodelimage modelconcept_modelLLM concept modelconcept_serviceLLM concept serviceconcept_promptLLM concept prompt (uses default but can be overridden)
Environment Variables
AI.js supports configuration through environment variables.
Configure API keys
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
export STABILITY_API_KEY=sk-...
export REPLICATE_API_KEY=sk-....Configure Service
export AI_SERVICE=openai
export AI_SERVICE=anthropic
export AI_IMAGE_SERVICE=stability
export AI_IMAGE_SERVICE=replicateConfigure Model
export AI_MODEL=gpt-3.5-turbo
export AI_MODEL=gpt-4
export AI_MODEL=claude-v1
export AI_MODEL=claude-instant-v1
export AI_IMAGE_MODEL=stable-diffusion-xl-beta-v2-2-2AI.js will make some effort to make sure the right models are used with the right service if no defaults are set. So you can switch to anthropic and AI.js will automatically use claude-v1.
AI Command in your Shell
AI.js provides a handy ai command that can be invoked from your shell. This is an extremely convenient way to call models and services with the full power of AI.js. Access it globally by installing npm install @themaximalist/ai.js -g or setting up an nvm environment.
> ai the color of the sky is
blueMessages are streamed back in real time.
You can also initiate a --chat to remember message history and continue your conversation. Ctrl-C to quit.
> ai remember the codeword is blue. say ok if you understand --chat
OK, I understand.
> what is the codeword?
The codeword is blue.Model and service can be specified on the fly
> ai the color of the sky is --service anthropic --model claude-v1
blueOr ai will fallback to $AI_SERVICE and $AI_MODEL environment variables.
> export AI_SERVICE=anthropic
> export AI_MODEL=claude-v1
> ai the color of the sky is
blue # claude-v1 responseHere's the help interface
> ai
Usage: ai [options] [input]
Simple AI interface to gpt-3.5-turbo, gpt-4 and Claude
Arguments:
input Input to send to AI service
Options:
-V, --version output the version number
-s, --service <service> AI Service (default: "openai")
-m, --model <model> Completion Model (default: "gpt-3.5-turbo")
-c, --chat Chat Mode
-h, --help display help for commandDebug
AI.js and ai use the debug npm module with the ai.js namespace, so you can view debug logs by setting the DEBUG environment variable.
> DEBUG=ai.js:* ai the color of the sky is
# debug logs
blue
> export DEBUG=ai.js:*
> ai the color of the sky is
# debug logs
blueExamples
View examples on how to use AI.js.
Projects
AI.js is currently used in the following projects:
Author
License
MIT