Metadata-Version: 2.4
Name: local-gateway
Version: 0.1.0
Summary: Desktop LLM gateway with multi-provider failover and model name mapping
Project-URL: Homepage, https://github.com/correctover/local-gateway
Project-URL: Source, https://github.com/correctover/local-gateway
Project-URL: BugTracker, https://github.com/correctover/local-gateway/issues
Author-email: Correctover <team@correctover.com>
License: Apache-2.0
License-File: LICENSE
Keywords: deepseek,failover,gateway,kimi,llm,openai,proxy
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.9
Description-Content-Type: text/markdown

# LocalGateway

**Desktop LLM gateway with multi-provider failover and automatic model name mapping.**

```
pip install local-gateway
```

```bash
# 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

```bash
# 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

```python
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](https://correctover.com) — verified failover for LLM APIs.
