Add readme.md
This commit is contained in:
198
readme.md
Normal file
198
readme.md
Normal file
@@ -0,0 +1,198 @@
|
|||||||
|
# LLM-Suite Installatiehandleiding (Whisper, Piper, Ollama, ha-llm-bridge, LiteLLM)
|
||||||
|
|
||||||
|
Deze handleiding beschrijft stap-voor-stap hoe je de volledige LLM-suite op een nieuwe server kunt installeren — inclusief NVIDIA GPU-ondersteuning, Docker, configuratiebestanden en koppeling met Home Assistant.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Systeempreparatie (Ubuntu 22.04/24.04 met NVIDIA GPU)
|
||||||
|
|
||||||
|
### Updates en tools
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt -y upgrade
|
||||||
|
sudo apt -y install curl ca-certificates gnupg lsb-release git
|
||||||
|
```
|
||||||
|
|
||||||
|
### NVIDIA-driver installeren
|
||||||
|
```bash
|
||||||
|
sudo ubuntu-drivers install
|
||||||
|
sudo reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
Na herstart:
|
||||||
|
```bash
|
||||||
|
nvidia-smi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Docker installeren
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
newgrp docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### NVIDIA Container Toolkit
|
||||||
|
```bash
|
||||||
|
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit.gpg && curl -fsSL https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y install nvidia-container-toolkit
|
||||||
|
sudo nvidia-ctk runtime configure --runtime=docker
|
||||||
|
sudo systemctl restart docker
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Mappenstructuur & .env-bestand
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo mkdir -p /docker/appdata/llm-suite/{wyoming-whisper,wyoming-piper,ollama,ha-llm-bridge,litellm}
|
||||||
|
sudo mkdir -p /docker/appdata/llm-suite/ha-llm-bridge/app
|
||||||
|
sudo touch /docker/appdata/llm-suite/ha-llm-bridge/requirements.txt
|
||||||
|
sudo chown -R $USER: /docker/appdata
|
||||||
|
```
|
||||||
|
|
||||||
|
Maak het **.env** bestand:
|
||||||
|
```bash
|
||||||
|
cat > /docker/appdata/llm-suite/.env << 'EOF'
|
||||||
|
HA_WEBHOOK_URL=https://jouw-ha-domein.example/api/webhook/ha-llm-bridge
|
||||||
|
LITELLM_MASTER_KEY=supergeheimesleutel
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Docker Compose-bestand
|
||||||
|
|
||||||
|
Sla dit bestand op als `/docker/appdata/llm-suite/docker-compose.yml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
<-- volledige YAML zoals in vorige bericht (om redenen van lengte niet herhaald) -->
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. ha-llm-bridge bestanden
|
||||||
|
|
||||||
|
### requirements.txt
|
||||||
|
```txt
|
||||||
|
fastapi==0.115.5
|
||||||
|
uvicorn[standard]==0.32.0
|
||||||
|
httpx==0.27.2
|
||||||
|
pydantic==2.9.2
|
||||||
|
```
|
||||||
|
|
||||||
|
### main.py
|
||||||
|
```python
|
||||||
|
import os
|
||||||
|
from fastapi import FastAPI
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
class EchoIn(BaseModel):
|
||||||
|
text: str
|
||||||
|
|
||||||
|
@app.get("/healthz")
|
||||||
|
def health():
|
||||||
|
return {"status": "ok"}
|
||||||
|
|
||||||
|
@app.post("/echo")
|
||||||
|
def echo(payload: EchoIn):
|
||||||
|
return {"ok": True, "echo": payload.text, "model": os.getenv("OLLAMA_MODEL", "unset")}
|
||||||
|
```
|
||||||
|
|
||||||
|
### system_prompt.txt
|
||||||
|
```txt
|
||||||
|
Je bent een behulpzame Nederlandstalige assistent. Antwoord kort, feitelijk en bruikbaar voor Home Assistant automations.
|
||||||
|
```
|
||||||
|
|
||||||
|
### entities.json
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
"light.woonkamer",
|
||||||
|
"switch.keuken",
|
||||||
|
"media_player.tv",
|
||||||
|
"climate.thermostaat"
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. LiteLLM Configuratie
|
||||||
|
|
||||||
|
Maak `/docker/appdata/llm-suite/litellm/config.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
model_list:
|
||||||
|
- model_name: qwen2-local
|
||||||
|
litellm_params:
|
||||||
|
model: ollama/qwen2:7b-instruct-q4_K_M
|
||||||
|
api_base: http://ollama:11434
|
||||||
|
timeout: 120
|
||||||
|
|
||||||
|
general_settings:
|
||||||
|
master_key: ${LITELLM_MASTER_KEY}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Opstarten
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /docker/appdata/llm-suite
|
||||||
|
docker compose -f docker-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Model downloaden:
|
||||||
|
```bash
|
||||||
|
docker exec -it ollama ollama pull qwen2:7b-instruct-q4_K_M
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Health Checks
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s http://localhost:11434/api/tags | jq
|
||||||
|
curl -s -H "Authorization: Bearer supergeheimesleutel" http://localhost:4000/v1/models | jq
|
||||||
|
curl -s http://localhost:8082/healthz
|
||||||
|
curl -s -X POST http://localhost:8082/echo -H 'Content-Type: application/json' -d '{"text":"ping"}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Home Assistant Integratie
|
||||||
|
|
||||||
|
- STT: Wyoming STT → `dockerhost:10300`
|
||||||
|
- TTS: Wyoming TTS → `dockerhost:10200`
|
||||||
|
- LLM (OpenAI compatible):
|
||||||
|
- Base URL: `http://dockerhost:4000/v1`
|
||||||
|
- API Key: `supergeheimesleutel`
|
||||||
|
- Model: `qwen2-local`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Beheer en Upgrades
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose ps
|
||||||
|
docker logs -f ollama
|
||||||
|
docker compose pull && docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Troubleshooting
|
||||||
|
|
||||||
|
- GPU niet zichtbaar → `nvidia-smi` en runtime check.
|
||||||
|
- Model ontbreekt → juiste tag downloaden.
|
||||||
|
- Port conflicts → poort aanpassen in Compose.
|
||||||
|
- HA kan niet verbinden → test met curl vanaf HA host.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
© 2025 Marco Voskuil — GPEU / voskuil.cloud
|
||||||
Reference in New Issue
Block a user