1
mirror of https://github.com/cocktailpeanut/dalai synced 2024-11-20 23:07:32 +01:00
dalai/docs/README.md

213 lines
4.5 KiB
Markdown
Raw Normal View History

2023-03-12 21:06:51 +01:00
# Dalai
Dead simple way to run LLaMA on your computer.
<a href="https://github.com/cocktailpeanut/dalai" class='inverse btn'><i class="fa-brands fa-github"></i> Github</a>
<a href="https://twitter.com/cocktailpeanut" class='inverse btn'><i class="fa-brands fa-twitter"></i> Twitter</a>
---
1. Powered by [llama.cpp](https://github.com/ggerganov/llama.cpp) and [llama-dl CDN](https://github.com/shawwn/llama-dl)
2. Web app included
3. Super simple JavaScript API
![dalai.gif](dalai.gif)
---
# Install
Basic install (7B model only)
```
npx dalai install
```
Install all models
```
npx dalai install 7B 13B 30B 65B
```
The install command :
1. Creates a folder named `dalai` under your home directory (`~`)
2. Installs and builds the [llama.cpp](https://github.com/ggerganov/llama.cpp) project under `~/dalai`
3. Downloads all the requested models from the [llama-dl CDN](https://github.com/shawwn/llama-dl) to `~/dalai/models`
4. Runs some tasks to convert the LLaMA models so they can be used
---
# Quickstart
Install the 7B model (default) and start a web UI:
```
npx dalai install
npx dalai serve
```
Then go to http://localhost:3000
Above two commands do the following:
1. First installs the 7B module (default)
2. Then starts a web/API server at port 3000
---
# API
Dalai is also an NPM package:
1. programmatically install
2. locally make requests to the model
3. run a dalai server (powered by socket.io)
3. programmatically make requests to a remote dalai server (via socket.io)
Dalai is an NPM package. You can install it using:
```
npm install dalai
```
---
## 1. constructor()
### Syntax
```javascript
const dalai = new Dalai(url)
```
- `url`: (optional)
- if unspecified, it uses the node.js API to directly run dalai
- if specified (for example `ws://localhost:3000`) it looks for a socket.io endpoint at the URL and connects to it.
### Examples
Initializing a client that connects to a local model (no network):
```javascript
const dalai = new Dalai()
```
Initializing a client that connects to a remote dalai server (a dalai server must be running at the URL):
```javascript
const dalai = new Dalai("ws://localhost:3000")
```
---
## 2. request()
### Syntax
```javascript
dalai.request(req, callback)
```
- `req`: a request object. made up of the following attributes:
- `prompt`: **(required)** The prompt string
- `model`: **(required)** The model name to query ("7B", "13B", etc.)
- `threads`: The number of threads to use (The default is 8 if unspecified)
- `n_predict`: The number of tokens to return (The default is 128 if unspecified)
- `seed`: The seed. The default is -1 (none)
- `top_k`
- `top_p`
- `temp`: temperature
- `batch_size`: batch size
- `callback`: the streaming callback function that gets called every time the client gets any token response back from the model
### Examples
#### 1. Node.js
Using node.js, you just need to initialize a Dalai object with `new Dalai()` and then use it.
```javascript
const Dalai = require('dalai')
new Dalai().request({
model: "7B",
prompt: "The following is a conversation between a boy and a girl:",
}, (token) => {
process.stdout.write(token)
})
```
#### 2. Non node.js (socket.io)
To make use of this in a browser or any other language, you can use thie socket.io API.
##### Step 1. start a server
First you need to run a Dalai socket server:
```javascript
// server.js
const Dalai = require('dalai')
new Dalai().serve(3000) // port 3000
```
##### Step 2. connect to the server
Then once the server is running, simply make requests to it by passing the `ws://localhost:3000` socket url when initializing the Dalai object:
```javascript
const Dalai = require("dalai")
new Dalai("ws://localhost:3000").request({
model: "7B",
prompt: "The following is a conversation between a boy and a girl:",
}, (token) => {
console.log("token", token)
})
```
---
## 3. serve()
### Syntax
Starts a socket.io server at `port`
```javascript
dalai.serve(port)
```
### Examples
```javascript
const Dalai = require("dalai")
new Dalai().serve(3000)
```
---
## 4. http()
### Syntax
connect with an existing `http` instance (The `http` npm package)
```javascript
dalai.http(http)
```
- `http`: The [http](https://nodejs.org/api/http.html) object
### Examples
This is useful when you're trying to plug dalai into an existing node.js web app
```javascript
const app = require('express')();
const http = require('http').Server(app);
dalai.http(http)
http.listen(3000, () => {
console.log("server started")
})
```