@themaximalist/ai.js
Version:
AI Toolkit for Node.js (LLM, Image Generation, Embeddings, Vector Search)
201 lines (126 loc) • 6.65 kB
Markdown
## AI.js
<img src="public/logo.png" alt="AI.js — AI Toolkit for Node.js" class="logo" style="max-width: 300px;" />
<div class="badges" style="text-align: center; margin-top: 0px;">
<a href="https://github.com/themaximal1st/ai.js"><img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/themaximal1st/ai.js"></a>
<a href="https://www.npmjs.com/package/@themaximalist/ai.js"><img alt="NPM Downloads" src="https://img.shields.io/npm/dt/%40themaximalist%2Fai.js"></a>
<a href="https://github.com/themaximal1st/ai.js"><img alt="GitHub code size in bytes" src="https://img.shields.io/github/languages/code-size/themaximal1st/ai.js"></a>
<a href="https://github.com/themaximal1st/ai.js"><img alt="GitHub License" src="https://img.shields.io/github/license/themaximal1st/ai.js"></a>
</div>
<br />
`AI.js` is the easiest way to add AI text, images, embeddings and vector search to your Node.js app.
```javascript
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"); // {prompt: a red rose in realist style, watercolor ...", <image buffer>}
await AI.Embeddings("hello world"); // Array(384)
const db = new AI.VectorDB();
await db.add("red");
await db.add("blue");
await db.search("redish") // red
```
Under the hood `AI.js` seamlessly integrates easy to use local and remote APIs
* **Text:** [LLM.js](https://llmjs.themaximalist.com) use `GPT-4`, `Gemini`, `Claude`, `Mistral` or `LLaMa` in same simple interface
* **Image:** [Imagine.js](https://imaginejs.themaximalist.com/) supports local `Stable Diffusion` and remote services like `Replicate` and `Stability AI`
* **Embeddings:** [Embeddings.js](https://embeddingsjs.themaximalist.com/) create `local`, `OpenAI` or `Mistral` embeddings
* **VectorDB:** [VectorDB.js](https://vectordbjs.themaximalist.com/) searches similar embeddings in memory
* **Audio:** *Coming Soon*
* **Video:** *Coming Soon*
## Features
* Easy to use
* Same simple interface for hundreds of models (OpenAI, Google, Anthropic, Mistral, LLaMa, Replicate, Stability AI, Hugging Face and more)
* Works locally and offline by default!
* Offers best-in-class options through remote APIs
* Advanced LLM features like one-shot prompts, chat history, streaming and JSON schema and more
* Image generation using the best open and paid models
* Image concepts to easily combine LLMs with Image generators for impressive results
* Easy to use text embeddings and in-memory vector search
* MIT license
## Installation
Install `AI.js` via npm
```bash
npm install /ai.js
```
Enable at least one service by setting its environment `API_KEY`
```bash
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
export GOOGLE_API_KEY=sk-ant-...
export STABILITY_API_KEY=sk-...
export REPLICATE_API_KEY=sk-....
export MISTRAL_API_KEY=...
```
## LLM
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).
```javascript
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?"); // blue
```
The default `AI.js` mode is `LLM`, and is running on top of [LLM.js](https://llmjs.themaximalist.com). Please see that site for full documentation, that also applies to `AI.js`.
There are many features supported across dozens of popular models, like streaming, JSON support, max_tokens, temperature, seed and more.
## Images
`AI.js` provides powerful image generation functions through `Automatic1111`, `StabilityAI` and `Replicate`. Make sure you have each service setup as needed, either running locally or a valid environment variable.
```javascript
const image = await AI.Image("a red rose");
fs.writeFileSync("rose.png", image);
```
See [Imagine.js](https://imaginejs.themaximalist.com/) for all image generator documentation.
### Imagine Concepts
`AI.js` also provides a concept generator—a way of using LLMs together with image generators.
```javascript
const { prompt, buffer } = await AI.Image.Concept("a red rose");
console.log(prompt); // a red rose in realist style, watercolor ..."
fs.writeFileSync("complex-rose.png", buffer);
```
This hits your `LLM` provider and generates a complex image prompt before sending it off to the image generation service.
## Embeddings
`AI.js` let's you easily generate local or remote embeddings using `Embeddings.js`.
```javascript
const embeddings = await AI.Embeddings("hello world"); // embedding array
```
It works with local embeddings, OpenAI and Mistral.
Embeddings can be used in any vector database like Pinecone, Chroma, PG Vector, etc...
See [Embeddings.js](https://embeddingsjs.themaximalist.com/) for all options.
## Vector Search
`AI.js` let's you quickly find similar text strings using a vector database.
It runs in-memory and can use embeddings from `AI.js`.
To find similar strings, add a few to the database, and then search.
```javascript
const db = new AI.VectorDB();
await db.add("orange");
await db.add("blue");
const result = await db.search("light orange");
// [ { input: 'orange', distance: 0.3109036684036255 } ]
```
See [VectorDB.js](https://vectordbjs.themaximalist.com/) for full documentation.
## API
`AI.js` includes these sub-projects:
* [LLM.js](https://llmjs.themaximalist.com) — Simple interface to dozens of Large Language Models
* [Imagine.js](https://imaginejs.themaximalist.com) — Local and remote image generation library
* [Embeddings.js](https://embeddingsjs.themaximalist.com) — Simple local or OpenAI text embeddings
* [VectorDB.js](https://vectordbjs.themaximal1st.com) — Local text similarity search
Check out each individual project for full API documentation.
They can be used individually or together like in `AI.js`.
## Debug
`AI.js` uses the `debug` npm module across all of it's sub-projects.
The namespace is the lowercase version of the project name.
View debug logs by setting the `DEBUG` environment variable.
```bash
> DEBUG=llm.js*
> node src/run_ai.js
# debug logs
```
You can combine multiple logs with a comma.
```bash
> DEBUG=llm.js*,imagine.js*,embeddings.js*,vectordb.js*
> node src/run_ai.js
# debug all logs
```
## Projects
`AI.js` is currently used in the following projects:
- [Infinity Arcade](https://infinityarcade.com) — Play any text adventure game
## License
MIT
## Author
Created by [The Maximalist](https://twitter.com/themaximal1st), see our [open-source projects](https://themaximalist.com/products).