This repository has been archived on 2024-10-27. You can view files and clone it, but cannot push or open issues or pull requests.
local-llm-server/README.md

55 lines
2.2 KiB
Markdown

# local-llm-server
_An HTTP API to serve local LLM Models._
The purpose of this server is to abstract your LLM backend from your frontend API. This enables you to switch your backend while providing a stable frontend clients.
### Install
1. `sudo apt install redis`
2. `python3 -m venv venv`
3. `source venv/bin/activate`
4. `pip install -r requirements.txt`
5. `wget https://git.evulid.cc/attachments/89c87201-58b1-4e28-b8fd-d0b323c810c4 -O /tmp/vllm_gptq-0.1.3-py3-none-any.whl && pip install /tmp/vllm_gptq-0.1.3-py3-none-any.whl && rm /tmp/vllm_gptq-0.1.3-py3-none-any.whl`
6. `python3 server.py`
An example systemctl service file is provided in `other/local-llm.service`.
### Configure
First, set up your LLM backend. Currently, only [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) is supported, but
eventually [huggingface/text-generation-inference](https://github.com/huggingface/text-generation-inference) will be the default.
Then, configure this server. The config file is located at `config/config.yml.sample` so copy it to `config/config.yml`.
1. Set `backend_url` to the base API URL of your backend.
2. Set `token_limit` to the configured token limit of the backend. This number is shown to clients and on the home page.
To set up token auth, add rows to the `token_auth` table in the SQLite database.
`token`: the token/password.
`type`: the type of token. Currently unused (maybe for a future web interface?) but required.
`priority`: the lower this value, the higher the priority. Higher priority tokens are bumped up in the queue line.
`uses`: how many responses this token has generated. Leave empty.
`max_uses`: how many responses this token is allowed to generate. Leave empty to leave unrestricted.
`expire`: UNIX timestamp of when this token expires and is not longer valid.
`disabled`: mark the token as disabled.
### Use
### To Do
- [x] Implement streaming
- [ ] Bring streaming endpoint up to the level of the blocking endpoint
- [x] Add VLLM support
- [ ] Make sure stats work when starting from an empty database
- [ ] Make sure we're correctly canceling requests when the client cancels
- [ ] Make sure the OpenAI endpoint works as expected