默认监听 40114 端口,需与客户端配置一致;用 go install 安装不会附带前端管理面板;需自行准备并配置 Ollama、vLLM 等推理后端,Olla 本身不提供模型。
olla
thushanApache-2.0活跃维护轻量级 LLM 基础设施代理和负载均衡器,能在本地与远程推理后端之间做智能路由、自动故障转移和统一模型发现。
High-performance lightweight proxy and load balancer for LLM infrastructure. Intelligent routing, automatic failover and unified model discovery across local and remote inference backends.
bash <(curl -s https://raw.githubusercontent.com/thushan/olla/main/install.sh)
docker run -t --name olla -p 40114:40114 ghcr.io/thushan/olla:latestREADME 未说明具体硬件要求;Olla 本身是 Go 编写的代理程序,推理负载由后端承担,支持 x86 与 ARM64 平台。
轻量高性能 LLM 推理代理与负载均衡器,统一路由本地和远程后端并自动故障转移
轻量级 LLM 基础设施代理和负载均衡器,能在本地与远程推理后端之间做智能路由、自动故障转移和统一模型发现。
核心能力
- 按优先级路由请求,连接失败时自动重试并无缝切换端点
- KV-cache 感知的粘性会话,把多轮对话固定到同一后端
- 聚合各后端模型目录,提供 OpenAI 兼容的跨提供方路由
- 持续健康检查配合熔断器,端点恢复后自动刷新模型发现
- 内置 Sherpa 与 Olla 双代理引擎,可选熔断和连接池
容易踩的坑
- v0.1.0Olla v0.1.0最新正式版2026-11-01 · 2026-11-01 00:19 UTC
What's in this release
Olla is a high-performance proxy and load balancer for LLM infrastructure.
Quick Start
# Docker docker pull ghcr.io/thushan/olla:v0.1.0 # Binary (see assets below) ./olla --config config.yamlWhat's New in v0.1.0
It's a big release and acknowledges the work we did to get here too with everyone's contributions to get us to this milestone! We'd have called this v0.0.30 but really, it's the first of the month and Olla has passed a lot of the stability checkpoints now.
There are lots of things to be aware of, documented in our Olla v0.1.0 Release Article or see the Full Release Writeup.
Behaviour Changes
- Request counts can halve, and a backend 5xx now counts as a failure. v0.0.29 counted every request that named a model twice, and earlier releases counted a backend
5xxas a success.total_requests, per-endpointrequests,success_rate,total_failuresand the matchingolla_*metrics now count each request once per backend attempt, so the status verdict, thelow success rateissue and any alert on these may change (#267). - Anthropic and Claude Code traffic is now rate limited.
/olla/anthropic/v1/messages,/messages/count_tokensand/modelstake the same limits as the proxy routes (100 requests per minute per IP, burst 50, 1000 globally) and share each client's per-IP bucket. Many sessions behind one IP (NAT, CI, parallel agents) may see 429s, so raiseserver.rate_limits.per_ip_requests_per_minuteandburst_size(#257). per_ip_requests_per_minute: 0no longer turns rate limiting off. The global limit (default 1000/min, burst 50) still applies. Setglobal_requests_per_minute: 0as well to disable both (#256).- A request is never retried once part of the response has reached the client. A GET that failed mid-stream used to be replayed on the next backend. It now ends with the error (#260).
- SGLang and LMDeploy pass Anthropic requests through. Needs SGLang v0.5.9+ or LMDeploy v0.13.0+. LMDeploy requests carrying
toolsare still translated. For older builds, override the profile withzz-sglang.yamlorzz-lmdeploy.yamland setapi.anthropic_support.enabled: false(#242). - Profiles declare the paths they serve. The shipped profiles now list
/v1/responses,/v1/messages,/v1/rerankand Ollama's/api/psand/api/version. A custom profile serving these paths needs the same entries (#240). - Anthropic translation uses each backend's own chat path. Docker Model Runner gets
/engines/v1/chat/completionsand Lemonade/api/v1/chat/completions. If no backend serves a chat path, the request gets a 404 (#241). - Ollama vision and tool models are typed differently. Vision models are
vlmwith thevisioncapability andtoolsmaps tofunction_calling.?type=llmno longer lists vision models;?capability=chatstill does (#250). /olla/ollama/api/psmerges every Ollama host. Entries carryolla_endpoint, a partial answer setsX-Olla-Partial, and the route is rate limited. The/olla/ollama/api/liststub is gone and/api/blobsreturns 501 (#243).- "Request completed" log lines carry
http_status, and a backend 5xx logs at WARN instead of INFO. Check any log-based alerting (#253). - Discovery
retry_attemptsandretry_backoffare now honoured. A negative `retry_
- Request counts can halve, and a backend 5xx now counts as a failure. v0.0.29 counted every request that named a model twice, and earlier releases counted a backend
- v0.0.29Olla v0.0.292026-08-10 · 2026-08-10 12:01 UTC
查看更新说明
What's in this release
Olla is a high-performance proxy and load balancer for LLM infrastructure.
Quick Start
# Docker docker pull ghcr.io/thushan/olla:v0.0.29 # Binary (see assets below) ./olla --config config.yamlWhat's New in v0.0.29
Admin Dashboard
- New embedded, read-only admin dashboard at
/internal/ui/- Overview (fleet status, success rate, latency, live requests-per-second sparkline), Endpoints (per-endpoint health, priority, latency, model count) and Models (inventory grouped by family, with hosting endpoints). Built in Svelte 5 + TailwindCSS, polled (not pushed) against the existing/internal/status*JSON, and served from the same listener as the proxy - no second port (#205). - The dashboard has no authentication. Access is controlled by a new
dashboard.access_policyconfig block (allowed_cidrs+allowed_hosts), loopback-only by default. The published Docker image ships withallowed_cidrspre-widened to the RFC1918 ranges sodocker run -p 40114:40114 ghcr.io/thushan/olla:latestgives you a working dashboard with no config mount - which also means the container is reachable from anyone else on the same LAN through that published port (#213). See the Admin Dashboard docs for the full security model. - A binary built without
make build-web(e.g. plaingo buildorgo install) now logs a clear startup warning and serves503at/internal/ui/instead of a silent placeholder (#213).
Observability
- Native
GET /internal/metricsin Prometheus text format, built from the same data as/internal/statusand/internal/stats/models- no external exporter needed for core proxy monitoring. Thanks to @Puupuls for the contribution (#188). /internal/status,/internal/status/endpointsand/internal/status/modelsnow emit a weakETag, so polling clients (including the new dashboard) can useIf-None-Matchand get304s instead of re-fetching the full payload (#205, #213).- Sticky-session and routing decisions are now in the structured "Request completed" log line (
sticky_outcome, routing strategy/action/reason,provider_model, translator fallback reason), not just response headers. Addresses issue #178 (#182). - Successful proxy requests log at
Infoagain in the access log; a prior regression had silently demoted them toDebug(#211).
Reliability
- A request landing on an endpoint whose circuit breaker is open now fails over to the next available endpoint instead of failing outright. The endpoint is dropped from that request's candidate list only - its persisted health is left alone, since an open breaker already reflects accumulated failure state and demoting health on top of it isn't the retry path's job (#213).
- Strict routing no longer lets an unroutable
model_aliasesentry silently proxy to the wrong backend: a request for an alias whose target model exists on no endpoint now fails fast with404/503androuting_action: rejected, matching how unknown models are already handled. Reported by @skaravos (#197, issue #191). config/models.yamlnow actually parses. It used\dinside double-quoted YAML scalars, which is invalid YAML, so the file has never loaded on any install - the failure was swallowed and Olla silently fell back to embedded defaults, discarding any customisation with no diagnostic. Reported by @billford (#206, issue #204).- New `-
- New embedded, read-only admin dashboard at
- v0.0.28Olla v0.0.282026-06-14 · 2026-06-14 00:03 UTC
查看更新说明
Olla is a high-performance proxy and load balancer for LLM infrastructure.
Quick Start
# Docker docker pull ghcr.io/thushan/olla:v0.0.28 # Binary (see assets below) ./olla --config config.yamlWhat's New in v0.0.28
This is a huge release and contains a lot of new exciting changes and bugfixes!
New Backends & Compatibility
- Native oMLX support - added the oMLX runtime as a first-class backend with native Anthropic Messages API passthrough (#167).
- Docker Model Runner Anthropic passthrough - passthrough now resolves the native messages path from the backend profile (
anthropic_support.messages_path), fixing 404s against DMR's/anthropic/v1/messages(#171). - Lemonade models are now routable - Lemonade's
downloadedflag is mapped toavailablestate, so downloaded models route correctly instead of being treated as unhealthy. Thanks to @matthewjhunter for the report and fix (#161, issue #160). - OpenAI alias fixes -
type: "openai"now resolves model listings correctly via/olla/openai/v1/models; removed the duplicateopenai.yamlprofile that caused non-deterministic route registration.openai-compatibleis the canonical value,openairemains an accepted alias. Thanks to @petersimmons1972 for the report (#151, issue #148). - OpenAI-compatible backends now surface maximum context-length information (#167).
Authentication & Security
Highly requested feature finally implemented!
- Per-endpoint authentication for local backends -
bearer,api_keyandbasicauth, with credentials from inline strings,${ENV_VAR}, or_filesiblings for Docker/k8s. Works with vLLM/llama.cpp/LiteLLM--api-keyor any bearer-auth reverse proxy. Thanks to @ShubhamTiwary914 for the report (#146, issue #132). - 401/403 health probes now report
config_errorinstead ofdead; 429 honoursRetry-Afterwithout tripping the circuit breaker; POST retries are skipped once response bytes have flushed (no double billing on mid-stream resets). - Capped upstream error bodies at 1 MiB and enforced
max_body_sizeon non-proxy and translator routes (including chunked bodies) (#173). - Strip inbound
X-Olla-*headers from upstream responses (anti-spoofing), sanitiseX-Request-IDto prevent log injection, and stop leaking the auth scheme in status JSON (#173).
CORS
- CORS support (opt-in, via
rs/cors) for browser-based clients like OpenWebUI and dashboards. Off by default; auto-exposes theX-Olla-*header set. Thanks to @ccsmart for the request (#159, issue #156).
Anthropic / Translation
- Reasoning → thinking translation - OpenAI
reasoning/reasoning_contentnow maps to Anthropicthinkingblocks in both streaming and non-streaming responses (#176). - Hardened streaming translation: preserves final
usagechunks, synthesises fallbackoutput_tokens, keeps same-chunk reasoning/content/tool-call deltas intact, and fixes repeated/interleaved tool-call handling (#176). - More reliable translated SSE: emits valid SSE error events after response commit, with proper
Flush/Unwrapon wrapped writers (#176). - Lenient Anthropic parsing - unknown/experimental Anthropic request fields (e.g.
context_management) are now ignored during translation and forwarded unchanged in passthrough mode. Thanks to @RenxuLogan for the report (#157, issue #154).
Configuration Tunables
- New tunables, all zero-value-means-default and
OLLA_-overridable (#164, #165): server.read_header_timeout(default10s) - guards against Slowloris-style slow-header attacks.proxy.response_header_timeout(default30s) - raise for on-demand model loaders (e.g. Lemonade) that would otherwise abort cold starts at 30s. Now honoured by both Olla and Sherpa. Thanks to @matthewjhunter (#164, issue #163).proxy.connection_keep_alive(default30s) and `proxy.tls_handsh
- v0.0.27Olla v0.0.272026-04-27 · 2026-04-27 11:11 UTC
查看更新说明
What's in this release
We've added native support for LMDeploy after so long as well as bugfixes for sticky sessions thanks to @lbatalha.
Quick Start
# Docker docker pull ghcr.io/thushan/olla:v0.0.27 # Binary (see assets below) ./olla --config config.yamlChangelog
Other
- 4ed9cf0d3f6e894fc719b6ad7d58771b9a0a9fb6: Bump github.com/puzpuzpuz/xsync/v4 from 4.4.0 to 4.5.0 (@dependabot[bot])
- b900a20f3fbab9c2d33445b87a41ae6f61d281d4: add aimock test harness for sticky sessions (@thushan)
- f350dcd086d34707cdb149a78d4c1aad05b6ccae: add language tags to skill code fences (@thushan)
- 249e9150d4466dbd1c843af75114d30a9c9d150d: add lmdeploy backend docs (@thushan)
- e52b561be1b0b9971ed4b0dd3e48e1b2bf6c1a48: add lmdeploy model converter and wire into factory and routes (@thushan)
- 364154e45d8cf61a160c15cbe44f6636c7fda702: add lmdeploy profile (@thushan)
- a06a3a96e846cf7acc675a2c018a2334bc98340d: add lmdeploy provider constants (@thushan)
- 252d0eadf5c50364a48718450e25c54899385c2c: add lmdeploy response parser (@thushan)
- 3fa18753f1489e33fb223d4e1b4ab9482d89c2b4: assert backend marker is non-empty in sticky tests (@thushan)
- 45f9865a9369bb091d2ab6c0c205759a1b25fa4e: clarify provider prefix helpers return no trailing slash (@thushan)
- 19b712b4f404075f846bd59fef130a058b3f487c: doc updates and lmdeploy TPS is still in the works. (@thushan)
- ab4a786c2cb821353f52ee4dd4ec427199bb3575: fix lmdeploy struct alignment (@thushan)
- a57501bae71165ad902250d2e14ea0a386e78bd7: fix prefix_hash fallback for empty messages array (@thushan)
- 85103410fb6eebfb3050ebfd0a6a7393b15ccfc3: fix sticky diversity check to ignore failed requests (@thushan)
- 305548098e4856a781d5dde16b3fa1fd28bccae1: fix sticky sessions for provider-scoped routes (#139) (@thushan)
- 95022d1e2d980e219ff2d85569e2b40f92bdc265: link lmdeploy from backend overview docs (@thushan)
- 4ac53f26a7e3d32b24f5efa95319ed17e3f268a8: pin aimock image digest for reproducible tests (@thushan)
- bbdd5f05f92f0e35618dee744b18f0df36c1fad5: readme update for native support for LMDeploy (@thushan)
- 85495d5742e6eeb6123df81894fa85056a8baedc: revert anthropic_support default + fix stale comment (@thushan)
- 7985c7c61ea20a75ec9008199d95d2dd31e57e77: stabilise sticky harness turn-3 diversity (@thushan)
- ac2386f8abacc2b9fcf3581f025dc969f09917e3: use docker compose --wait instead of custom poll (@thushan)
Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues
- v0.0.26Olla v0.0.262026-04-20 · 2026-04-20 22:55 UTC
查看更新说明
What's in this release
This is a bugfix release that addresses SSL connection issues due to mis-handling of the Host header.
Quick Start
# Docker docker pull ghcr.io/thushan/olla:v0.0.26 # Binary (see assets below) ./olla --config config.yamlChangelog
Other
- 68961575d34853af945b400913bc1e56030303e3: Bump actions/upload-pages-artifact from 4 to 5 (@dependabot[bot])
- 0d3ff86a6d7e493a4191a8db39ec7eac22939206: doc updates (@thushan)
- 50287bf918a2cb8c1df0237c787e81bd109c757e: lets you build docker image locally without goreleaser (@thushan)
- 9505fbabcd577898e2376487c06e1d1c089adbb0: make docker builds portable across arm and amd (@thushan)
Documentation: thushan.github.io/olla | Issues: github.com/thushan/olla/issues
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Olla is a high-performance, low-overhead, low-latency proxy and load balancer for managing LLM infrastructure. It intelligently routes LLM requests across self-hosted inference nodes with a wide variety of natively supported endpoints and extensible enough to support others. Olla provides model discovery and unified model catalogues within each provider, enabling seamless routing to available models on compatible endpoints.
Olla works alongside API gateways like LiteLLM or orchestration platforms like GPUStack, focusing on making your existing LLM infrastructure reliable through intelligent routing and failover. You can choose between two proxy engines: Sherpa for simplicity and maintainability or Olla for maximum performance with advanced features like circuit breakers and connection pooling.

Single CLI application and config file is all you need to go Olla!
For large GPU deployments, enterprise and data centre use, see TensorFoundry FoundryOS. For an inference control plane, consider Alloy.
Key Features
- 🔄 Smart Load Balancing: Priority-based routing with automatic failover and connection retry
- 📌 Sticky Sessions: KV-cache-aware affinity routing that pins multi-turn conversations to the same backend
- 🔍 Smart Model Unification: Per-provider unification + OpenAI-compatible cross-provider routing
- ⚡ Dual Proxy Engines: Sherpa (simple) and Olla (high-performance)
- 🎯 Advanced Filtering: Profile and model filtering with glob patterns for precise control
- 💊 Health Monitoring: Continuous endpoint health checks with circuit breakers and automatic recovery
- 🔁 Intelligent Retry: Automatic retry on connection failures with immediate transparent endpoint failover, tunable with
proxy.retry - 🔧 Self-Healing: Automatic model discovery refresh when endpoints recover
- 📊 Request Tracking: Detailed response headers and statistics
- ⚡🔄 Anthropic Messages API: Passthrough for backends with native support; automatic translation for others
- 🧬 Embeddings and Rerank: Text Embeddings Inference support, with model-less embedding and rerank requests routed to a host serving that kind
- 🔐 Backend Authentication: Outbound auth for local backends requiring API keys, bearer tokens, or basic auth
- 🛡️ Production Ready: Rate limiting, request size limits, optional CORS for browser clients, configurable proxy/server timeouts, graceful shutdown
- ⚡ High Performance: Sub-millisecond endpoint selection with lock-free atomic stats
- 🎯 LLM-Optimised: Streaming-first design with optimised timeouts for long inference
- ⚙️ High Performance: Designed to be very lightweight & efficient, runs on less than 50Mb RAM.
- 📈 Admin Dashboard: Read-only fleet overview embedded in the binary at
/internal/ui/, on by default and loopback-only
Herd Dashboard
Olla ships with an embedded (v0.0.29+), read-only dashboard at /internal/ui/ - fleet health, a filterable herd table with selectable columns, sticky session, translator and process cards, and the discovered model inventory, served straight from the binary. No extra port, no separate web server, on by default and loopback-only.
Start Olla and open http://localhost:40114/internal/ui/ to see your herd.
Supported Backends
Olla proxies the following self-hosted inference backends. The Anthropic API column shows whether /olla/anthropic/ requests are forwarded as-is (native passthrough) or translated from Anthropic format to OpenAI format on the fly.
| Backend | Docs | Anthropic API |
|---|---|---|
| Ollama | Integration | ⚡ Passthrough (v0.14.0+) |
| LM Studio | Integration | ⚡ Passthrough (v0.4.1+) |
| vLLM | Integration | ⚡ Passthrough (v0.11.1+) |
| vLLM-MLX | Integration | ⚡ Passthrough |
| llama.cpp | Integration | ⚡ Passthrough (b4847+) |
| Docker Model Runner | Integration | ⚡ Passthrough |
| oMLX | Integration | ⚡ Passthrough (v0.4.2+) |
| SGLang | Integration | ⚡ Passthrough (v0.5.9+) |
| LMDeploy | Integration | ⚡ Passthrough (v0.13.0+) |
| Lemonade SDK | Integration | 🔄 Translation |
| LiteLLM | Integration | 🔄 Translation |
| OpenAI-compatible (generic) | Integration | 🔄 Translation |
| Text Embeddings Inference | Integration | N/A (no chat or text generation) |
⚡ Passthrough: Olla forwards Anthropic-format requests directly; the backend handles them natively, with no translation overhead.
🔄 Translation: Olla converts Anthropic ↔ OpenAI format automatically; any OpenAI-compatible backend works transparently.
LiteLLM is the recommended bridge when you need Olla to reach hosted cloud APIs (OpenAI, Anthropic, Bedrock, etc.). Learn more about how they compare Olla vs LiteLLM and where each fits, where each wins etc.
Platform Support
Olla runs on multiple platforms and architectures:
| Platform | AMD64 | ARM64 | Notes |
|---|---|---|---|
| Linux | ✅ | ✅ | Full support including Raspberry Pi 4+ |
| macOS | ✅ | ✅ | Intel and Apple Silicon (M1/M2/M3/M4) |
| Windows | ✅ | ✅ | Windows 10/11 and Windows on ARM |
| Docker | ✅ | ✅ | Multi-architecture images (amd64/arm64) |
Quick Start
Installation
# Download latest release (auto-detects your platform)
bash <(curl -s https://raw.githubusercontent.com/thushan/olla/main/install.sh)
# Docker (automatically pulls correct architecture)
docker run -t \
--name olla \
-p 40114:40114 \
ghcr.io/thushan/olla:latest
# Or explicitly specify platform (e.g., for ARM64)
docker run --platform linux/arm64 -t \
--name olla \
-p 40114:40114 \
ghcr.io/thushan/olla:latest
You can still use the go install method, but you won't get the bundled front-end, but you can see
Admin Dashboard: building the frontend.
# Install via Go
go install github.com/thushan/olla@latest
Or you can build and run it from source:
# Build from source
git clone https://github.com/thushan/olla.git && cd olla && make build-release
# Run Olla
./bin/olla
# Build Docker image locally (no goreleaser required)
git clone https://github.com/thushan/olla.git && cd olla && make docker-build-local
docker run -p 40114:40114 ghcr.io/thushan/olla:local-amd64
Verification
When you have everything running, you can check it's all working with:
# Check health of Olla
curl http://localhost:40114/internal/health
# Check endpoints
curl http://localhost:40114/internal/status/endpoints
# Check models available
curl http://localhost:40114/internal/status/models
For detailed installation and deployment options, see Getting Started Guide.
Querying Olla
Olla exposes multiple API paths depending on your use case:
| Path | Format | Use Case |
|---|---|---|
/olla/proxy/ | OpenAI | Routes to any backend, universal endpoint |
/olla/anthropic/ | Anthropic | Claude-compatible clients (passthrough or translated) |
/olla/openai/ | OpenAI | OpenAI-compatible route (type: "openai" is an alias for openai-compatible) |
/olla/{provider}/ | OpenAI | Target a specific backend type (e.g. /olla/vllm/, /olla/ollama/) |
OpenAI-Compatible (Universal Proxy)
Use /olla/proxy/ as the universal entry point that routes to any backend.
# Chat completion (routes to best available backend)
curl http://localhost:40114/olla/proxy/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama3.2", "messages": [{"role": "user", "content": "Hello"}], "max_tokens": 100}'
# Streaming
curl http://localhost:40114/olla/proxy/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama3.2", "messages": [{"role": "user", "content": "Hello"}], "max_tokens": 100, "stream": true}'
# List all models across backends
curl http://localhost:40114/olla/proxy/v1/models
Anthropic Messages API
You can use /olla/anthropic
# Chat completion (passthrough for supported backends, translated for others)
curl http://localhost:40114/olla/anthropic/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: not-needed" \
-H "anthropic-version: 2023-06-01" \
-d '{"model": "llama3.2", "max_tokens": 100, "messages": [{"role": "user", "content": "Hello"}]}'
# Streaming
curl http://localhost:40114/olla/anthropic/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: not-needed" \
-H "anthropic-version: 2023-06-01" \
-d '{"model": "llama3.2", "max_tokens": 100, "messages": [{"role": "user", "content": "Hello"}], "stream": true}'
Provider-Specific Endpoints
Use provider specific patterns (Eg. /olla/ollama)
# Target a specific backend type directly
curl http://localhost:40114/olla/ollama/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "llama3.2", "messages": [{"role": "user", "content": "Hello"}], "max_tokens": 100}'
# Other providers: /olla/vllm/, /olla/vllm-mlx/, /olla/lm-studio/, /olla/llamacpp/, etc.
Examples
We've also got ready-to-use Docker Compose setups for common scenarios:
Common Architectures
- Home Lab: Olla → Multiple Ollama (or OpenAI Compatible - eg. vLLM) instances across your machines
- Hybrid Cloud: Olla → Local endpoints + LiteLLM → Cloud APIs (OpenAI, Anthropic, Bedrock, etc.)
- Enterprise: Olla → GPUStack cluster + vLLM servers + LiteLLM (cloud overflow)
- Development: Olla → Local + Shared team endpoints + LiteLLM (API access)
See integration patterns for detailed architectures.
For a robust enterprise setup, consider TensorFoundry FoundryOS.
🌐 OpenWebUI Integration
Complete setup with OpenWebUI + Olla load balancing multiple Ollama instances or unify all OpenAI compatible models.
- See:
examples/ollama-openwebui/ - Services: OpenWebUI (web UI) + Olla (proxy/load balancer)
- Use Case: Web interface with intelligent load balancing across multiple Ollama servers with Olla
- Quick Start:
cd examples/ollama-openwebui # Edit olla.yaml to configure your Ollama endpoints docker compose up -d # Access OpenWebUI at http://localhost:3000
You can learn more about OpenWebUI Ollama with Olla or see OpenWebUI OpenAI with Olla.
🤖 Anthropic Message API / CLI Tools - Claude Code, OpenCode, Crush
Olla's Anthropic Messages API support (v0.0.20+) is enabled by default, allowing you to use CLI tools like Claude Code with local AI models on your machine via /olla/anthropic. It operates in two modes depending on your backend:
- ⚡ Passthrough: requests are forwarded as-is for backends with native Anthropic support (vLLM, vLLM-MLX, SGLang, LMDeploy, llama.cpp, Ollama, LM Studio, Docker Model Runner, oMLX)
- 🔄 Translation: Anthropic ↔ OpenAI format conversion for backends that don't natively support the Anthropic Messages API
Still actively being improved -- please report any issues or feedback.
We have examples for:
Learn more about Anthropic API Translation.
Documentation
Full documentation is available at https://thushan.github.io/olla/
- Getting Started - Getting Started with Olla
- Integrations - See which LLM backends are supported by Olla
- Comparisons - Compare with LiteLLM, GPUStack, LocalAI
- Olla Concepts - Understand Key Olla concepts
- Configuration - Extensive configuration documentation
- API Reference - Olla System API Reference
- Development - Contributing and development guide
Guides
In-depth guides on the TensorFoundry blog:
- What is an LLM Proxy? - Why you end up needing one
- Olla vs LiteLLM - Where each fits, where each wins
- Deploying LLMs on Your Own Infrastructure - A practical guide
- LLM Inference Servers Compared - vLLM, SGLang, llama.cpp and Ollama
🤝 Contributing
We welcome contributions! Please open an issue first to discuss major changes.
🤖 AI Disclosure
This project has been built with the assistance of AI tools for documentation, test refinement, and code reviews.
We've utilised GitHub Copilot, Anthropic Claude, JetBrains Junie, Codex & TensorFoundry Kaizen for documentation, code reviews, test refinement and troubleshooting.
We also utilise CodeRabbit for AI-driven code reviews for PRs prior to human review.
🙏 Acknowledgements
- @pterm/pterm - Terminal UI framework
- @puzpuzpuz/xsync - High-performance concurrent maps
- @golangci/golangci-lint - Go linting
- @dkorunic/betteralign - Struct alignment optimisation
📄 License
Licensed under the Apache License 2.0. See LICENSE for details.
Built by TensorFoundry, Australian AI infrastructure for running LLMs on your own hardware.
🌐 TensorFoundry • 📖 Documentation • 🐛 Issues • 🚀 Releases
Made with ❤️ for the LLM community