Feat: Fügt einen headroomlabs-Service für Prompt-Compression hinzu
This commit is contained in:
@@ -29,6 +29,12 @@ GEMINI_API_KEY=
|
|||||||
GROQ_API_KEY=
|
GROQ_API_KEY=
|
||||||
MISTRAL_API_KEY=
|
MISTRAL_API_KEY=
|
||||||
|
|
||||||
|
# --- Headroom (Prompt-Kompression) ---
|
||||||
|
# Standardmäßig läuft der Headroom-Proxy lokal im Docker-Compose-Netzwerk unter http://headroom:8787
|
||||||
|
HEADROOM_API_BASE=http://headroom:8787
|
||||||
|
# Optional: API-Key falls ein externer/Cloud Headroom-Service genutzt wird (für den lokalen Proxy leer lassen)
|
||||||
|
HEADROOM_API_KEY=
|
||||||
|
|
||||||
# --- Optional ---
|
# --- Optional ---
|
||||||
SLACK_WEBHOOK_URL=
|
SLACK_WEBHOOK_URL=
|
||||||
LANGFUSE_PUBLIC_KEY=
|
LANGFUSE_PUBLIC_KEY=
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install build dependencies for native C++ extensions (e.g. hnswlib) and install headroom-ai
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
curl \
|
||||||
|
&& pip install --no-cache-dir "headroom-ai[all]" \
|
||||||
|
&& apt-get purge -y build-essential \
|
||||||
|
&& apt-get autoremove -y \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Allow requests from other containers in the Docker network
|
||||||
|
ENV HEADROOM_COMPRESS_ALLOW_REMOTE=1
|
||||||
|
|
||||||
|
EXPOSE 8787
|
||||||
|
|
||||||
|
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=5 \
|
||||||
|
CMD python3 -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8787/readyz', timeout=5)" || exit 1
|
||||||
|
|
||||||
|
ENTRYPOINT ["headroom", "proxy"]
|
||||||
|
CMD ["--host", "0.0.0.0", "--port", "8787"]
|
||||||
@@ -1,3 +1,78 @@
|
|||||||
# litellm
|
# LiteLLM Docker Compose Setup
|
||||||
|
|
||||||
Eine einfache docker-compose um LiteLLM zu starten.
|
Dieses Projekt stellt ein vollständiges Setup für den **LiteLLM Proxy** mit PostgreSQL-Datenbank (für UI/Key-/Team-Management), Redis (für Caching/Routing), Prometheus (Monitoring) und **Headroom Prompt-Kompression** bereit.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Funktionen
|
||||||
|
|
||||||
|
- **LiteLLM Database & Admin UI**: Verwaltung von Modellen, API-Keys, Benutzern, Teams und Guardrails über das Webinterface (`http://localhost:4000/ui`).
|
||||||
|
- **Headroom Proxy Service**:
|
||||||
|
- Eigener Headroom Proxy-Container (`http://localhost:8787` bzw. intern `http://headroom:8787`).
|
||||||
|
- Verwendet das offizielle Multi-Arch-Image `ghcr.io/headroomlabs-ai/headroom:main` oder kann alternativ via `Dockerfile.headroom` lokal gebaut werden.
|
||||||
|
- Ermöglicht ML-basierte und strukturelle Prompt-Kompression direkt im lokalen Stack ohne Cloud-Abhängigkeit.
|
||||||
|
- **Headroom Prompt-Kompression in LiteLLM**:
|
||||||
|
- Global standardmäßig für alle Anfragen aktiviert (`default_guardrails: ["headroom"]`).
|
||||||
|
- Als Guardrail (`headroom`) definiert, sodass es in der LiteLLM Web-UI sichtbar ist und spezifischen API-Keys, Teams oder Modellen zugewiesen oder angepasst werden kann.
|
||||||
|
- **PostgreSQL**: Persistente Speicherung aller Modelle, Spend-Logs, Teams und Guardrail-Zuweisungen.
|
||||||
|
- **Redis**: Caching von Antworten und Rate-Limiting.
|
||||||
|
- **Prometheus**: Metriken-Erfassung unter `http://localhost:9090`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Schnellstart
|
||||||
|
|
||||||
|
1. **Umgebungsvariablen konfigurieren**:
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
Öffne `.env` und trage deine Werte ein:
|
||||||
|
- `LITELLM_MASTER_KEY` & `LITELLM_SALT_KEY`
|
||||||
|
- `UI_USERNAME` & `UI_PASSWORD` (für den Login in die Web-UI)
|
||||||
|
- `HEADROOM_API_KEY` (und optional `HEADROOM_API_BASE`, Standard: `https://api.headroom.ai`)
|
||||||
|
- Deine LLM-Provider API-Keys (z.B. `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, etc.)
|
||||||
|
|
||||||
|
2. **Container starten**:
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Web-UI öffnen**:
|
||||||
|
- URL: `http://localhost:4000/ui` (oder `http://<server-ip>:4000/ui`)
|
||||||
|
- Logge dich mit `UI_USERNAME` und `UI_PASSWORD` oder dem `LITELLM_MASTER_KEY` ein.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Headroom-Kompression verwenden & zuweisen
|
||||||
|
|
||||||
|
### 1. Globale Standard-Aktivierung ("für alles")
|
||||||
|
In `config.yaml` ist Headroom unter `litellm_settings` als Standard-Guardrail hinterlegt:
|
||||||
|
```yaml
|
||||||
|
litellm_settings:
|
||||||
|
default_guardrails: ["headroom"]
|
||||||
|
```
|
||||||
|
Dadurch wird Headroom automatisch bei allen eingehenden Anfragen zur Prompt-Kompression angewendet.
|
||||||
|
|
||||||
|
### 2. Zuweisung und Verwaltung über die Web-UI
|
||||||
|
Da `headroom` in `config.yaml` unter `guardrails:` definiert ist, steht es in der LiteLLM Web-UI an folgenden Stellen zur Verfügung:
|
||||||
|
|
||||||
|
- **API-Keys**:
|
||||||
|
- Gehe in der Web-UI auf **API Keys** → **Create New Key** (oder bestehenden Key bearbeiten).
|
||||||
|
- Wähle im Feld **Guardrails** den Eintrag `headroom` aus, um die Kompression für diesen Key zu erzwingen.
|
||||||
|
- **Teams**:
|
||||||
|
- Gehe auf **Teams** → **Create Team** (oder bestehendes Team bearbeiten).
|
||||||
|
- Wähle unter **Guardrails** `headroom` aus, damit alle Keys dieses Teams automatisch komprimiert werden.
|
||||||
|
- **Modelle**:
|
||||||
|
- Unter **Models** / **Add Model** kann `guardrails: ["headroom"]` direkt an spezifische Modelle gebunden werden.
|
||||||
|
- **Guardrails-Übersicht**:
|
||||||
|
- Unter **Guardrails** in der Web-UI siehst du alle registrierten Guardrails inklusive `headroom` und deren Status.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Konfigurationsdateien
|
||||||
|
|
||||||
|
- `docker-compose.yaml`: Definiert die Services `litellm`, `headroom`, `db` (Postgres), `redis` und `prometheus`.
|
||||||
|
- `Dockerfile.headroom`: Dockerfile zum optionalen lokalen Bauen des Headroom-Proxy-Images.
|
||||||
|
- `config.yaml`: LiteLLM Proxy-Konfiguration inklusive Caching, Routing, Logging und Headroom-Guardrail.
|
||||||
|
- `.env.example`: Vorlage für Passwörter, Master-Keys und Provider/Headroom-Konfiguration.
|
||||||
|
- `prometheus.yaml`: Konfiguration für das Scraping der LiteLLM-Metriken.
|
||||||
+12
@@ -18,6 +18,18 @@ litellm_settings:
|
|||||||
success_callback: ["prometheus", "langfuse"]
|
success_callback: ["prometheus", "langfuse"]
|
||||||
failure_callback: ["prometheus"]
|
failure_callback: ["prometheus"]
|
||||||
|
|
||||||
|
# Standard-Guardrails für alle Anfragen (Headroom Prompt-Kompression für alles aktiv)
|
||||||
|
default_guardrails: ["headroom"]
|
||||||
|
|
||||||
|
# Guardrail-Definitionen (werden auch in der LiteLLM Web-UI angezeigt und können Keys/Teams/Modellen zugewiesen werden)
|
||||||
|
guardrails:
|
||||||
|
- guardrail_name: "headroom"
|
||||||
|
litellm_params:
|
||||||
|
guardrail: "headroom"
|
||||||
|
mode: "pre_call"
|
||||||
|
api_key: os.environ/HEADROOM_API_KEY
|
||||||
|
api_base: os.environ/HEADROOM_API_BASE
|
||||||
|
|
||||||
general_settings:
|
general_settings:
|
||||||
master_key: os.environ/LITELLM_MASTER_KEY
|
master_key: os.environ/LITELLM_MASTER_KEY
|
||||||
database_url: os.environ/DATABASE_URL
|
database_url: os.environ/DATABASE_URL
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ services:
|
|||||||
- GEMINI_API_KEY=${GEMINI_API_KEY}
|
- GEMINI_API_KEY=${GEMINI_API_KEY}
|
||||||
- GROQ_API_KEY=${GROQ_API_KEY}
|
- GROQ_API_KEY=${GROQ_API_KEY}
|
||||||
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
|
- MISTRAL_API_KEY=${MISTRAL_API_KEY}
|
||||||
|
# --- Headroom (Prompt-Kompression) ---
|
||||||
|
- HEADROOM_API_KEY=${HEADROOM_API_KEY:-}
|
||||||
|
- HEADROOM_API_BASE=${HEADROOM_API_BASE:-http://headroom:8787}
|
||||||
# --- Optionale Alerts / Logging ---
|
# --- Optionale Alerts / Logging ---
|
||||||
- SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
|
- SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
|
||||||
- LANGFUSE_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY}
|
- LANGFUSE_PUBLIC_KEY=${LANGFUSE_PUBLIC_KEY}
|
||||||
@@ -47,6 +50,8 @@ services:
|
|||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
redis:
|
redis:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
|
headroom:
|
||||||
|
condition: service_healthy
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:4000/health/liveliness"]
|
test: ["CMD", "curl", "-f", "http://localhost:4000/health/liveliness"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
@@ -56,6 +61,34 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- litellm-network
|
- litellm-network
|
||||||
|
|
||||||
|
headroom:
|
||||||
|
image: ghcr.io/headroomlabs-ai/headroom:main
|
||||||
|
# Falls das Image lokal gebaut werden soll (Dockerfile.headroom im Repo vorhanden):
|
||||||
|
# build:
|
||||||
|
# context: .
|
||||||
|
# dockerfile: Dockerfile.headroom
|
||||||
|
container_name: litellm-headroom
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8787:8787"
|
||||||
|
environment:
|
||||||
|
# Erlaubt Anfragen von anderen Containern im Docker-Netzwerk an den /v1/compress Endpoint
|
||||||
|
- HEADROOM_COMPRESS_ALLOW_REMOTE=1
|
||||||
|
# Optional: Provider-Keys falls Headroom eigenständig Provider ansteuert
|
||||||
|
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||||
|
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||||
|
volumes:
|
||||||
|
- ./data/headroom:/root/.headroom
|
||||||
|
command: ["--host", "0.0.0.0", "--port", "8787"]
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "python3 -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:8787/readyz', timeout=5)\""]
|
||||||
|
interval: 15s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
start_period: 20s
|
||||||
|
networks:
|
||||||
|
- litellm-network
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: postgres:16-alpine
|
image: postgres:16-alpine
|
||||||
container_name: litellm-db
|
container_name: litellm-db
|
||||||
|
|||||||
Reference in New Issue
Block a user