A Caddy-based proxy server that bridges Open WebUI and Helicone by translating header formats, enabling proper tracking of user properties in Helicone when using Open WebUI.
When using Open WebUI with Helicone (an LLMOps platform), there's a header compatibility issue:
- Helicone expects custom properties in headers with the format:
Helicone-Property-* - Open WebUI sends user information in headers with the format:
X-OpenWebUI-*(whenENABLE_FORWARD_USER_INFO_HEADERS=true) - Neither platform supports custom header key configuration
This proxy solves this by rewriting the headers in-flight.
The proxy intercepts requests from Open WebUI to Helicone and:
- Maps Open WebUI headers to Helicone property headers
- Removes the original Open WebUI headers to avoid clutter
- Forwards the request to Helicone with properly formatted headers
| Open WebUI Header | Helicone Property Header |
|---|---|
X-OpenWebUI-User-Name |
Helicone-Property-UserName |
X-OpenWebUI-User-Id |
Helicone-Property-UserId |
X-OpenWebUI-User-Email |
Helicone-Property-UserEmail |
X-OpenWebUI-User-Role |
Helicone-Property-UserRole |
X-OpenWebUI-Chat-Id |
Helicone-Property-ChatId |
- Docker
- Open WebUI instance with
ENABLE_FORWARD_USER_INFO_HEADERS=true - Helicone API key
Pull and run the pre-built container from GitHub Container Registry:
docker run -d -p 8080:80 --name helicone-proxy ghcr.io/sliplane/openwebui-helicone-proxy:latestOr using docker-compose:
services:
proxy:
image: ghcr.io/sliplane/openwebui-helicone-proxy:latest
ports:
- "8080:80"
restart: unless-stopped-
Set the environment variable in your Open WebUI deployment:
ENABLE_FORWARD_USER_INFO_HEADERS=true
-
Configure your OpenAI API connection to point to the proxy instead of Helicone directly:
- Instead of:
https://oai.helicone.ai/v1/helicone-api-key - Use:
http://your-proxy-host:8080/v1/helicone-api-key
- Instead of:
-
Keep your OpenAI API key in the Authorization header as usual
- It does not implement any authentication mechanisms
- It forwards all requests to Helicone
- Deploy it within your private network (e.g., Docker network, VPC)
- If exposing publicly, use a reverse proxy with authentication
[Open WebUI] → [Private Network] → [Helicone Proxy] → [Internet] → [Helicone API]
After deployment, you can verify the proxy is working by:
- Making a request through Open WebUI
- Checking your Helicone dashboard
- Confirming that custom properties appear:
- UserName
- UserId
- UserEmail
- UserRole
- ChatId
MIT