Desktop LLM gateway with multi-provider failover and model name mapping
Project description
LocalGateway
Desktop LLM gateway with multi-provider failover and automatic model name mapping.
pip install local-gateway
# Set your API keys
export DEEPSEEK_API_KEY=sk-...
export KIMI_API_KEY=sk-...
# Start the gateway
local-gateway --providers deepseek,kimi
Why?
Every desktop AI tool (Cursor, Claude Desktop, Windsurf, Continue.dev) lets you configure one API endpoint. If that provider goes down, your tool stops working.
LocalGateway is a lightweight proxy that sits between your desktop tools and LLM providers. It tries providers in sequence — if the first one fails, it automatically falls back to the next.
The Model Name Problem
Model names are not portable across providers:
| Your Request | DeepSeek | KIMI |
|---|---|---|
deepseek-chat |
✅ works | ❌ 404 — KIMI doesn't know this name |
gpt-4o |
❌ doesn't exist | ❌ doesn't exist |
LocalGateway solves this with a cross-provider model name mapping table. When falling back from DeepSeek to KIMI, it automatically maps deepseek-chat → moonshot-v1-128k.
Usage
# Two providers (DeepSeek → KIMI auto-failover)
local-gateway --providers deepseek,kimi
# Three providers
local-gateway --providers deepseek,kimi,openai
# Custom port
local-gateway --providers deepseek,kimi --port 8080
# Explicit API keys (instead of env vars)
local-gateway --providers deepseek,kimi \
--api-key deepseek=sk-xxx \
--api-key kimi=sk-yyy
# Listen on all interfaces (for Docker/LAN)
local-gateway --providers deepseek,kimi --host 0.0.0.0
Configuration
Environment Variables
| Provider | Env Variable |
|---|---|
| DeepSeek | DEEPSEEK_API_KEY |
| KIMI | KIMI_API_KEY |
| OpenAI | OPENAI_API_KEY |
| Anthropic | ANTHROPIC_API_KEY |
| Groq | GROQ_API_KEY |
| Together | TOGETHER_API_KEY |
| Mistral | MISTRAL_API_KEY |
| Google Gemini | GOOGLE_API_KEY |
| OpenRouter | OPENROUTER_API_KEY |
Using with any OpenAI-compatible client
import openai
client = openai.OpenAI(
base_url="http://127.0.0.1:18790/v1",
api_key="not-needed", # local-gateway doesn't validate the client key
)
How It Works
┌─────────────────┐
Client ──POST──→ local-gateway │
│ │
├→ try DeepSeek ──→ HTTP 200 → forward response
│ │
└→ DeepSeek fails │
→ try KIMI ────→ HTTP 200 → forward response
│
all fail ────→ 502
For SSE streaming, the proxy connects to the upstream before sending HTTP 200 to the client. This means failover is transparent — the client never sees a partial response.
Built-in Providers
See local-gateway --list-providers for the full list.
Cross-Provider Model Mappings
See local-gateway --list-models for the current mapping table.
License
Apache 2.0
Built by Correctover — verified failover for LLM APIs.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file local_gateway-0.1.0.tar.gz.
File metadata
- Download URL: local_gateway-0.1.0.tar.gz
- Upload date:
- Size: 12.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c74bbae276744d6b05ac3dce90db8a2eb06b349fa25b780f4e67f7414956cc0
|
|
| MD5 |
0f17987c8879c01ce4b90a4ced9988e0
|
|
| BLAKE2b-256 |
574b45f55f8c33c178670cd7ce5a65318b3be5d8a945a29e178a100476a806a8
|
File details
Details for the file local_gateway-0.1.0-py3-none-any.whl.
File metadata
- Download URL: local_gateway-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ea7ff0605a637786c2cc307103c0e2c2c8eca859d8337a24fd6ab0f35fbd7d9
|
|
| MD5 |
ff00cc798ece583bf73b2f0925e56dc8
|
|
| BLAKE2b-256 |
16069d81a4e7102323d9ef4d9cc67da1686a4022b3abd7a15ca9cce851dd13a3
|