# User Guide (Svenska)
🌐 **Languages:** 🇺🇸 [English](../../../../guides/USER_GUIDE.md) · 🇪🇹 [am](../../../am/docs/guides/USER_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/guides/USER_GUIDE.md) · 🇦🇿 [az](../../../az/docs/guides/USER_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/guides/USER_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/guides/USER_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/guides/USER_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/guides/USER_GUIDE.md) · 🇩🇰 [da](../../../da/docs/guides/USER_GUIDE.md) · 🇩🇪 [de](../../../de/docs/guides/USER_GUIDE.md) · 🇬🇷 [el](../../../el/docs/guides/USER_GUIDE.md) · 🇪🇸 [es](../../../es/docs/guides/USER_GUIDE.md) · 🇪🇪 [et](../../../et/docs/guides/USER_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/guides/USER_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/guides/USER_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/guides/USER_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/guides/USER_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/guides/USER_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/guides/USER_GUIDE.md) · 🇮🇱 [he](../../../he/docs/guides/USER_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/guides/USER_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/guides/USER_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/guides/USER_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/guides/USER_GUIDE.md) · 🇮🇩 [id](../../../id/docs/guides/USER_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/guides/USER_GUIDE.md) · 🇮🇹 [it](../../../it/docs/guides/USER_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/guides/USER_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/guides/USER_GUIDE.md) · 🇰🇭 [km](../../../km/docs/guides/USER_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/guides/USER_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/guides/USER_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/guides/USER_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/guides/USER_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/guides/USER_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/guides/USER_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/guides/USER_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/guides/USER_GUIDE.md) · 🇲🇲 [my](../../../my/docs/guides/USER_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/guides/USER_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/guides/USER_GUIDE.md) · 🇳🇴 [no](../../../no/docs/guides/USER_GUIDE.md) · 🇮🇳 [or](../../../or/docs/guides/USER_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/guides/USER_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/guides/USER_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/guides/USER_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/guides/USER_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/USER_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/guides/USER_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/guides/USER_GUIDE.md) · 🇱🇰 [si](../../../si/docs/guides/USER_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/guides/USER_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/guides/USER_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/guides/USER_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/guides/USER_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/guides/USER_GUIDE.md) · 🇮🇳 [te](../../../te/docs/guides/USER_GUIDE.md) · 🇹🇭 [th](../../../th/docs/guides/USER_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/guides/USER_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/guides/USER_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/guides/USER_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/guides/USER_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/guides/USER_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/guides/USER_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/guides/USER_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/guides/USER_GUIDE.md)
---
🌐 **Languages:** 🇺🇸 [English](../../../../guides/USER_GUIDE.md) · 🇪🇹 [am](../../../am/docs/guides/USER_GUIDE.md) · 🇸🇦 [ar](../../../ar/docs/guides/USER_GUIDE.md) · 🇦🇿 [az](../../../az/docs/guides/USER_GUIDE.md) · 🇧🇬 [bg](../../../bg/docs/guides/USER_GUIDE.md) · 🇧🇩 [bn](../../../bn/docs/guides/USER_GUIDE.md) · 🇧🇦 [bs](../../../bs/docs/guides/USER_GUIDE.md) · 🇨🇿 [cs](../../../cs/docs/guides/USER_GUIDE.md) · 🇩🇰 [da](../../../da/docs/guides/USER_GUIDE.md) · 🇩🇪 [de](../../../de/docs/guides/USER_GUIDE.md) · 🇬🇷 [el](../../../el/docs/guides/USER_GUIDE.md) · 🇪🇸 [es](../../../es/docs/guides/USER_GUIDE.md) · 🇪🇪 [et](../../../et/docs/guides/USER_GUIDE.md) · 🇮🇷 [fa](../../../fa/docs/guides/USER_GUIDE.md) · 🇫🇮 [fi](../../../fi/docs/guides/USER_GUIDE.md) · 🇫🇷 [fr](../../../fr/docs/guides/USER_GUIDE.md) · 🇮🇪 [ga](../../../ga/docs/guides/USER_GUIDE.md) · 🇮🇳 [gu](../../../gu/docs/guides/USER_GUIDE.md) · 🇳🇬 [ha](../../../ha/docs/guides/USER_GUIDE.md) · 🇮🇱 [he](../../../he/docs/guides/USER_GUIDE.md) · 🇮🇳 [hi](../../../hi/docs/guides/USER_GUIDE.md) · 🇭🇷 [hr](../../../hr/docs/guides/USER_GUIDE.md) · 🇭🇺 [hu](../../../hu/docs/guides/USER_GUIDE.md) · 🇦🇲 [hy](../../../hy/docs/guides/USER_GUIDE.md) · 🇮🇩 [id](../../../id/docs/guides/USER_GUIDE.md) · 🇳🇬 [ig](../../../ig/docs/guides/USER_GUIDE.md) · 🇮🇹 [it](../../../it/docs/guides/USER_GUIDE.md) · 🇯🇵 [ja](../../../ja/docs/guides/USER_GUIDE.md) · 🇬🇪 [ka](../../../ka/docs/guides/USER_GUIDE.md) · 🇰🇭 [km](../../../km/docs/guides/USER_GUIDE.md) · 🇮🇳 [kn](../../../kn/docs/guides/USER_GUIDE.md) · 🇰🇷 [ko](../../../ko/docs/guides/USER_GUIDE.md) · 🇱🇹 [lt](../../../lt/docs/guides/USER_GUIDE.md) · 🇱🇻 [lv](../../../lv/docs/guides/USER_GUIDE.md) · 🇮🇳 [ml](../../../ml/docs/guides/USER_GUIDE.md) · 🇮🇳 [mr](../../../mr/docs/guides/USER_GUIDE.md) · 🇲🇾 [ms](../../../ms/docs/guides/USER_GUIDE.md) · 🇲🇹 [mt](../../../mt/docs/guides/USER_GUIDE.md) · 🇲🇲 [my](../../../my/docs/guides/USER_GUIDE.md) · 🇳🇵 [ne](../../../ne/docs/guides/USER_GUIDE.md) · 🇳🇱 [nl](../../../nl/docs/guides/USER_GUIDE.md) · 🇳🇴 [no](../../../no/docs/guides/USER_GUIDE.md) · 🇮🇳 [or](../../../or/docs/guides/USER_GUIDE.md) · 🇮🇳 [pa](../../../pa/docs/guides/USER_GUIDE.md) · 🇵🇭 [phi](../../../phi/docs/guides/USER_GUIDE.md) · 🇵🇱 [pl](../../../pl/docs/guides/USER_GUIDE.md) · 🇵🇹 [pt](../../../pt/docs/guides/USER_GUIDE.md) · 🇧🇷 [pt-BR](../../../pt-BR/docs/guides/USER_GUIDE.md) · 🇷🇴 [ro](../../../ro/docs/guides/USER_GUIDE.md) · 🇷🇺 [ru](../../../ru/docs/guides/USER_GUIDE.md) · 🇱🇰 [si](../../../si/docs/guides/USER_GUIDE.md) · 🇸🇰 [sk](../../../sk/docs/guides/USER_GUIDE.md) · 🇸🇮 [sl](../../../sl/docs/guides/USER_GUIDE.md) · 🇷🇸 [sr](../../../sr/docs/guides/USER_GUIDE.md) · 🇰🇪 [sw](../../../sw/docs/guides/USER_GUIDE.md) · 🇮🇳 [ta](../../../ta/docs/guides/USER_GUIDE.md) · 🇮🇳 [te](../../../te/docs/guides/USER_GUIDE.md) · 🇹🇭 [th](../../../th/docs/guides/USER_GUIDE.md) · 🇹🇷 [tr](../../../tr/docs/guides/USER_GUIDE.md) · 🇺🇦 [uk-UA](../../../uk-UA/docs/guides/USER_GUIDE.md) · 🇵🇰 [ur](../../../ur/docs/guides/USER_GUIDE.md) · 🇺🇿 [uz](../../../uz/docs/guides/USER_GUIDE.md) · 🇻🇳 [vi](../../../vi/docs/guides/USER_GUIDE.md) · 🇳🇬 [yo](../../../yo/docs/guides/USER_GUIDE.md) · 🇨🇳 [zh-CN](../../../zh-CN/docs/guides/USER_GUIDE.md) · 🇹🇼 [zh-TW](../../../zh-TW/docs/guides/USER_GUIDE.md)
Komplett guide för att konfigurera leverantörer, skapa kombinationer, integrera CLI-verktyg och distribuera OmniRoute.
---
## Innehållsförteckning
- [Prisöversikt](#-pricing-at-a-glance)
- [Användningsfall](#-use-cases)
- [Konfiguration av leverantörer](#-provider-setup)
- [CLI-integration](#-cli-integration)
- [Driftsättning](#-deployment)
- [Tillgängliga modeller](#-available-models)
- [Avancerade funktioner](#-advanced-features)
- [Automatisk dirigering (ingen konfiguration)](#-auto-routing-zero-config)
- [MCP- och A2A-integration](#-mcp--a2a-integration)
- [Kompetenssystem](#-skills-system)
- [Minnessystem](#-memory-system)
- [Webhooks](#-webhooks)
- [Molnagenter](#-cloud-agents)
- [Programmatisk hantering](#-programmatic-management)
- [Internt CLI](#-internal-cli)
- [Skrivbordsapplikation (Electron)](#-desktop-application-electron)
---
## 💰 Prisöversikt
| Nivå | Leverantör | Kostnad | Kvoten återställs | Passar bäst för |
| -------------------- | ----------------- | --------------------- | ---------------------------- | -------------------------------- |
| **💳 PRENUMERATION** | Claude Code (Pro) | $20/mån | 5 tim + veckovis | Redan prenumerant |
| | Codex (Plus/Pro) | $20–200/mån | 5 tim + veckovis | OpenAI-användare |
| | GitHub Copilot | $10–19/mån | Månadsvis | GitHub-användare |
| **🔑 API-NYCKEL** | DeepSeek | Betala per användning | Ingen | Billig slutledning |
| | Groq | Betala per användning | Ingen | Ultrasnabb inferens |
| | xAI (Grok) | Betala per användning | Ingen | Slutledning med Grok 4 |
| | Mistral | Betala per användning | Ingen | EU-baserade modeller |
| | Perplexity | Betala per användning | Ingen | Sökförstärkt |
| | Together AI | Betala per användning | Ingen | Modeller med öppen källkod |
| | Fireworks AI | Betala per användning | Ingen | Snabba FLUX-bilder |
| | Cerebras | Betala per användning | Ingen | Hastighet i waferskala |
| | Cohere | Betala per användning | Ingen | Command R+ RAG |
| | NVIDIA NIM | Betala per användning | Ingen | Företagsmodeller |
| | Baidu Qianfan | Betala per användning | Ingen | ERNIE-modeller |
| **💰 BILLIGT** | GLM-4.7 | $0.6/1M | Dagligen kl. 10 | Budgetreserv |
| | MiniMax M2.1 | $0.2/1M | Rullande 5-timmarsperiod | Billigaste alternativet |
| | Kimi K2 | Fast pris på $9/mån | 10M tokens/mån | Förutsägbar kostnad |
| **🆓 GRATIS** | Qoder | $0 | Leverantörens gränser gäller | Kontrollera aktuellt modellutbud |
| | Kiro | $0 | ~50 krediter/mån | Kostnadsfri Claude |
---
## 🎯 Användningsfall
### Fall 1: ”Jag har en Claude Pro-prenumeration”
**Problem:** Kvoten går ut oanvänd och hastighetsbegränsningar uppstår vid intensiv kodning
```
Kombination: "maximize-claude"
1. cc/claude-opus-4-7 (utnyttja prenumerationen fullt ut)
2. glm/glm-4.7 (billig reserv när kvoten är slut)
3. if/qwen3.8-max-preview (kostnadsfri nödreserv)
Månadskostnad: $20 (prenumeration) + ~$5 (reserv) = totalt $25
jämfört med $20 + att nå gränserna = frustration
```
### Fall 2: ”Jag vill ha noll kostnad”
**Problem:** Har inte råd med prenumerationer och behöver tillförlitlig AI-kodning
```
Kombination: "zero-cost"
1. if/kimi-k2.7-code (angiven kostnadsfri åtkomst; hastighetsbegränsningar kan gälla)
2. kr/qwen3-coder-next (kostnadsfri Kiro-reserv)
Månadskostnad: $0
Kvalitet: verifiera modellen, begränsningarna, integriteten och SLA:n för din arbetsbelastning
```
### Fall 3: ”Jag behöver kodning dygnet runt, utan avbrott”
**Problem:** Tidsfrister och inget utrymme för driftstopp
```
Kombination: "always-on"
1. cc/claude-opus-4-7 (bästa kvalitet)
2. cx/gpt-5.5 (andra prenumerationen)
3. glm/glm-4.7 (billig, återställs dagligen)
4. minimax/MiniMax-M2.1 (billigast, återställs efter 5 tim)
5. if/deepseek-v4-flash (angiven kostnadsfri åtkomst; hastighetsbegränsningar kan gälla)
Resultat: 5 reservnivåer ger bättre motståndskraft; tillgänglighet uppströms kan inte garanteras
Månadskostnad: $20–200 (prenumerationer) + $10–20 (reserv)
```
### Fall 4: ”Jag vill ha KOSTNADSFRI AI i OpenClaw”
**Problem:** Behöver en AI-assistent i meddelandeappar, helt kostnadsfritt
```
Kombination: "openclaw-free"
1. if/qwen3.8-max-preview (angiven kostnadsfri åtkomst; hastighetsbegränsningar kan gälla)
2. if/deepseek-v4-flash (angiven kostnadsfri åtkomst; hastighetsbegränsningar kan gälla)
3. if/kimi-k2.7-code (angiven kostnadsfri åtkomst; hastighetsbegränsningar kan gälla)
Månadskostnad: $0
Åtkomst via: WhatsApp, Telegram, Slack, Discord, iMessage, Signal...
```
---
## 📖 Konfiguration av leverantörer
För att lägga till flera API-nyckelanslutningar samtidigt från en CSV- eller JSON-fil använder du **Instrumentpanel → Leverantörer → Importera från fil**. Kolumnerna är positionsbaserade (`provider,name,apiKey,baseUrl,priority`); `provider` måste redan finnas som en hanterad leverantör eller en kompatibel nod. Se [Importera leverantörer från en CSV- eller JSON-fil](../providers/CSV-IMPORT.md).
### 🔐 Prenumerationsleverantörer
#### Claude Code (Pro/Max)
```bash
Instrumentpanel → Leverantörer → Anslut Claude Code
→ OAuth-inloggning → Automatisk uppdatering av token
→ Kvotspårning per 5 timmar + vecka
Modeller:
cc/claude-opus-4-7
cc/claude-sonnet-4-6
cc/claude-haiku-4-5-20251001
```
**Proffstips:** Använd Opus för komplexa uppgifter och Sonnet för snabbhet. OmniRoute spårar kvoten per modell!
Ingen webbläsare på OmniRoute-värden? Kör `claude setup-token` var som helst där Claude Code är inloggat och klistra in den ettåriga token på fliken **Setup Token**. Se [Claude Code med en setup-token](../providers/CLAUDE_CODE_SETUP_TOKEN.md).
Claude- och Claude Code-kompatibla rutter bevarar tankeansträngningen `max` för Opus- och Sonnet-modeller. Haiku-modeller stöder inte ansträngningsnivån `max`, så OmniRoute nedgraderar den begäran till en hög tankebudget innan den skickas vidare uppströms.
#### OpenAI Codex (Plus/Pro)
```bash
Instrumentpanel → Leverantörer → Anslut Codex
→ OAuth-inloggning (port 1455)
→ Återställning per 5 timmar + vecka
Modeller:
cx/gpt-5.5
cx/gpt-5.4
cx/gpt-5.3-codex
cx/gpt-5.3-codex-spark
```
#### GitHub Copilot
```bash
Instrumentpanel → Leverantörer → Anslut GitHub
→ OAuth via GitHub
→ Månatlig återställning (den 1:a varje månad)
Modeller:
gh/gpt-5.5
gh/gpt-5.4
gh/claude-sonnet-4.6
gh/claude-opus-4.7
gh/gemini-3.1-pro-preview
```
### 💰 Billiga leverantörer
#### GLM-4.7 (daglig återställning, $0.6/1M)
1. Registrera dig: [Zhipu AI](https://open.bigmodel.cn)
2. Hämta API-nyckeln från Coding Plan
3. Instrumentpanel → Lägg till API-nyckel: Leverantör: `glm`, API-nyckel: `your-key`
**Använd:** `glm/glm-4.7` — **Proffstips:** Coding Plan erbjuder 3× kvot till 1/7 av kostnaden! Återställs dagligen kl. 10.00.
#### MiniMax M2.1 (återställning efter 5 h, $0.20/1M)
1. Registrera dig: [MiniMax](https://www.minimax.io)
2. Hämta API-nyckeln → Instrumentpanel → Lägg till API-nyckel
**Använd:** `minimax/MiniMax-M2.1` — **Proffstips:** Det billigaste alternativet för långa kontexter (1M token)!
#### Kimi K2 (fast pris på $9/månad)
1. Prenumerera: [Moonshot AI](https://platform.kimi.ai?aff=omniroute)
2. Hämta API-nyckeln → Instrumentpanel → Lägg till API-nyckel
**Använd:** `kimi/kimi-k2.5` — **Proffstips:** Fast pris på $9/månad för 10M token = en effektiv kostnad på $0.90/1M!
#### Baidu Qianfan / ERNIE
1. Registrera dig: [Baidu AI Cloud Qianfan](https://cloud.baidu.com/product/wenxinworkshop)
2. Skapa en Qianfan API-nyckel → Instrumentpanel → Lägg till API-nyckel: Leverantör: `qianfan`
**Använd:** `qianfan/ernie-5.1`, `qianfan/ernie-x1.1` eller ett annat Qianfan-modell-ID som är kompatibelt med OpenAI.
### 🆓 GRATIS leverantörer
Kostnadsfria leverantörer utan autentisering har ett reglage bredvid **Ingen autentisering krävs** på sin leverantörssida.
Om du stänger av det inaktiveras leverantören, den tas bort från de konfigurerade/kompakta leverantörsvyerna och
dess modeller tas bort från `/v1/models`.
#### Qoder (9 GRATIS modeller)
```bash
Instrumentpanel → Anslut Qoder → OAuth-inloggning → Åtkomst omfattas av leverantörens aktuella begränsningar
Modeller: if/qwen3.8-max-preview, if/qwen3.7-max, if/qwen3.7-plus, if/kimi-k3, if/kimi-k2.7-code, if/glm-5.2, if/deepseek-v4-pro, if/deepseek-v4-flash, if/minimax-m3
```
#### Kiro (Claude GRATIS)
```bash
Instrumentpanel → Anslut Kiro → AWS Builder ID eller Google/GitHub → ~50 krediter/månad
Modeller: kr/claude-sonnet-4.5, kr/claude-haiku-4.5
```
---
## 🎨 Kombinationer
Du kan ändra ordningen på kombinationskort direkt i **Kontrollpanel → Kombinationer** genom att dra i handtaget på varje kort. Ordningen lagras i SQLite och återställs vid omladdning.
### Exempel 1: Maximera prenumeration → Billig reservmodell
```
Kontrollpanel → Kombinationer → Skapa ny
Namn: premium-coding
Modeller:
1. cc/claude-opus-4-7 (Primär prenumerationsmodell)
2. glm/glm-4.7 (Billig reservmodell, $0.6/1M)
3. minimax/MiniMax-M2.7 (Billigaste reservalternativet, $0.3/1M)
Använd i CLI: premium-coding
```
### Exempel 2: Endast kostnadsfria modeller (noll kostnad)
```
Namn: free-combo
Modeller:
1. if/kimi-k2.7-code (angiven som kostnadsfri åtkomst; leverantörsbegränsningar kan gälla)
2. kr/qwen3-coder-next (kostnadsfri reservmodell från Kiro)
Kostnad: anges för närvarande som $0; villkor och tillgänglighet kan ändras
```
---
## 🔧 CLI-integration
### Cursor IDE
**Använda Cursor som en OmniRoute-klient** (dirigera Cursor-chatten genom OmniRoute):
```
Inställningar → Modeller → Avancerat:
OpenAI API-bas-URL: http://localhost:20128/v1
OpenAI API-nyckel: [från OmniRoute-kontrollpanelen]
Modell: cc/claude-opus-4-7
```
**Använda OmniRoute som en Cursor-leverantör** (OmniRoute anropar Cursor uppströms): använd helst
**Kontrollpanel → Leverantörer → Cursor → Logga in med Cursor**. För Docker, se
[`docs/providers/CURSOR-DOCKER.md`](../providers/CURSOR-DOCKER.md).
### Claude Code
Redigera `~/.claude/settings.json`:
```json
{
"env": {
"ANTHROPIC_BASE_URL": "http://localhost:20128",
"ANTHROPIC_AUTH_TOKEN": "your-omniroute-api-key"
}
}
```
Använd den Claude-kompatibla rotslutpunkten här. Lägg inte till `/v1` i `ANTHROPIC_BASE_URL`.
### Codex CLI
```bash
export OPENAI_BASE_URL="http://localhost:20128"
export OPENAI_API_KEY="your-omniroute-api-key"
codex "your prompt"
```
### OpenClaw
Redigera `~/.openclaw/openclaw.json`:
```json
{
"agents": {
"defaults": {
"model": { "primary": "omniroute/if/kimi-k2.7-code" }
}
},
"models": {
"providers": {
"omniroute": {
"baseUrl": "http://localhost:20128/v1",
"apiKey": "your-omniroute-api-key",
"api": "openai-completions",
"models": [{ "id": "if/kimi-k2.7-code", "name": "Kimi K2.7 Code" }]
}
}
}
}
```
**Eller använd kontrollpanelen:** CLI-verktyg → OpenClaw → Automatisk konfiguration
### Cline / Continue / RooCode
```
Leverantör: OpenAI-kompatibel
Bas-URL: http://localhost:20128/v1
API-nyckel: [från kontrollpanelen]
Modell: cc/claude-opus-4-7
```
---
## 🚀 Driftsättning
### Global npm-installation (rekommenderas)
```bash
npm install -g omniroute
# Skapa konfigurationskatalog
mkdir -p ~/.omniroute
# Skapa .env-fil (se .env.example)
cp .env.example ~/.omniroute/.env
# Starta servern
omniroute
# Eller med en anpassad port:
omniroute --port 3000
```
CLI:n läser automatiskt in `.env` från `~/.omniroute/.env` eller `./.env`.
### Systemfältsläge
Starta OmniRoute i systemfältet:
```bash
omniroute serve --tray
```
Kommandot avslutas när servern och systemfältet är redo.
Servern fortsätter att köras utan terminalen.
Systemfältsläget stöder macOS, Windows och grafiska Linux-sessioner. Systemfältsläget öppnar inte kontrollpanelen automatiskt.
Använd systemfältsmenyn för följande åtgärder:
- Öppna kontrollpanelen.
- Öppna `/dashboard/logs`.
- Ändra automatisk start.
- Stoppa OmniRoute.
Kombinera inte `--tray` med följande alternativ:
- `--daemon`
- `--log`
- `--no-recovery`
Dessa lägen kräver olika processägarskap.
Aktivera start vid nästa inloggning på datorn:
```bash
omniroute autostart enable
```
Automatisk start använder systemfältsläget på macOS, Windows och i grafiska Linux-sessioner. Huvudlösa Linux-system använder den befintliga systemd-användartjänsten.
Inaktivera start vid inloggning:
```bash
omniroute autostart disable
```
### Avinstallation
När du inte längre behöver OmniRoute tillhandahåller vi två snabba skript för en ren borttagning:
| Kommando | Åtgärd |
| ------------------------ | -------------------------------------------------------------------------------------------- |
| `npm run uninstall` | Tar bort systemappen men **behåller din databas och dina konfigurationer** i `~/.omniroute`. |
| `npm run uninstall:full` | Tar bort appen OCH **raderar permanent alla konfigurationer, nycklar och databaser**. |
> Obs! För att köra dessa kommandon går du till OmniRoute-projektmappen (om du klonade den) och kör dem där. Om OmniRoute installerades globalt kan du alternativt köra `npm uninstall -g omniroute`.
### VPS-driftsättning
```bash
git clone https://github.com/diegosouzapw/OmniRoute.git
cd OmniRoute && npm install && npm run build
export JWT_SECRET="your-secure-secret-change-this"
export INITIAL_PASSWORD="your-password"
export DATA_DIR="/var/lib/omniroute"
export PORT="20128"
export HOSTNAME="0.0.0.0"
export NODE_ENV="production"
export NEXT_PUBLIC_BASE_URL="http://localhost:20128"
export API_KEY_SECRET="endpoint-proxy-api-key-secret"
npm run start
# Eller: pm2 start npm --name omniroute -- start
```
### PM2-driftsättning (lågt minnesbehov)
För servrar med begränsat RAM-minne använder du alternativet för minnesgräns:
```bash
# Med gränsen 512 MB (standard)
pm2 start npm --name omniroute -- start
# Eller med en anpassad minnesgräns
OMNIROUTE_MEMORY_MB=512 pm2 start npm --name omniroute -- start
# Eller med ecosystem.config.js
pm2 start ecosystem.config.js
```
Skapa `ecosystem.config.js`:
```javascript
module.exports = {
apps: [
{
name: "omniroute",
script: "npm",
args: "start",
env: {
NODE_ENV: "production",
OMNIROUTE_MEMORY_MB: "512",
JWT_SECRET: "your-secret",
INITIAL_PASSWORD: "your-password",
},
node_args: "--max-old-space-size=512",
max_memory_restart: "300M",
},
],
};
```
### Docker
```bash
# Bygg avbildningen (standard = runner-cli med codex/claude/droid förinstallerade)
docker build -t omniroute:cli .
# Portabelt läge (rekommenderas)
docker run -d --name omniroute -p 20128:20128 --env-file ./.env -v omniroute-data:/app/data omniroute:cli
```
För värdintegrerat läge med CLI-binärfiler, se Docker-avsnittet i huvuddokumentationen.
### Void Linux (xbps-src)
Void Linux-användare kan paketera och installera OmniRoute direkt med hjälp av ramverket `xbps-src` för korskompilering. Detta automatiserar den fristående Node.js-versionen tillsammans med de nödvändiga systemspecifika bindningarna för `better-sqlite3`.
Visa xbps-src-mallen
```bash
# Mallfil för 'omniroute'
pkgname=omniroute
version=3.8.0
revision=1
hostmakedepends="nodejs python3 make"
depends="openssl"
short_desc="Universal AI gateway with smart routing for multiple LLM providers"
maintainer="zenobit "
license="MIT"
homepage="https://github.com/diegosouzapw/OmniRoute"
distfiles="https://github.com/diegosouzapw/OmniRoute/archive/refs/tags/v${version}.tar.gz"
checksum=009400afee90a9f32599d8fe734145cfd84098140b7287990183dde45ae2245b
system_accounts="_omniroute"
omniroute_homedir="/var/lib/omniroute"
export NODE_ENV=production
export npm_config_engine_strict=false
export npm_config_loglevel=error
export npm_config_fund=false
export npm_config_audit=false
do_build() {
# Fastställ målprocessorarkitekturen för node-gyp
local _gyp_arch
case "$XBPS_TARGET_MACHINE" in
aarch64*) _gyp_arch=arm64 ;;
armv7*|armv6*) _gyp_arch=arm ;;
i686*) _gyp_arch=ia32 ;;
*) _gyp_arch=x64 ;;
esac
# 1) Installera alla beroenden – hoppa över skript
NODE_ENV=development npm ci --ignore-scripts
# 2) Bygg det fristående Next.js-paketet
npm run build
# 3) Kopiera statiska resurser till det fristående paketet
cp -r .next/static .next/standalone/.next/static
[ -d public ] && cp -r public .next/standalone/public || true
# 4) Kompilera den systemspecifika bindningen för better-sqlite3
local _node_gyp=/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js
(cd node_modules/better-sqlite3 && node "$_node_gyp" rebuild --arch="$_gyp_arch")
# 5) Placera den kompilerade bindningen i det fristående paketet
local _bs3_release=.next/standalone/node_modules/better-sqlite3/build/Release
mkdir -p "$_bs3_release"
cp node_modules/better-sqlite3/build/Release/better_sqlite3.node "$_bs3_release/"
# 6) Ta bort arkitekturspecifika sharp-paket
rm -rf .next/standalone/node_modules/@img
# 7) Kopiera pino-körtidsberoenden som utelämnats av Next.js statiska analys:
for _mod in pino-abstract-transport split2 process-warning; do
cp -r "node_modules/$_mod" .next/standalone/node_modules/
done
}
do_check() {
npm run test:unit
}
do_install() {
vmkdir usr/lib/omniroute/.next
vcopy .next/standalone/. usr/lib/omniroute/.next/standalone
# Förhindra att tomma Next.js-kataloger för app-routern tas bort av efterinstallationskroken
for _d in \
.next/standalone/.next/server/app/dashboard \
.next/standalone/.next/server/app/dashboard/settings \
.next/standalone/.next/server/app/dashboard/providers; do
touch "${DESTDIR}/usr/lib/omniroute/${_d}/.keep"
done
cat > "${WRKDIR}/omniroute" <<'EOF'
#!/bin/sh
export PORT="${PORT:-20128}"
export DATA_DIR="${DATA_DIR:-${XDG_DATA_HOME:-${HOME}/.local/share}/omniroute}"
export APP_LOG_TO_FILE="${APP_LOG_TO_FILE:-false}"
mkdir -p "${DATA_DIR}"
exec node /usr/lib/omniroute/.next/standalone/server.js "$@"
EOF
vbin "${WRKDIR}/omniroute"
}
post_install() {
vlicense LICENSE
}
```
### Miljövariabler
| Variabel | Standardvärde | Beskrivning |
| --------------------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
| `JWT_SECRET` | `omniroute-default-secret-change-me` | Hemlighet för JWT-signering (**ändra i produktion**) |
| `INITIAL_PASSWORD` | `CHANGEME` | Lösenord för första inloggningen |
| `DATA_DIR` | `~/.omniroute` | Datakatalog (databas, användning, loggar) |
| `PORT` | ramverkets standardvärde | Tjänsteport (`20128` i exemplen) |
| `HOSTNAME` | ramverkets standardvärde | Värd att binda till (Docker använder som standard `0.0.0.0`) |
| `NODE_ENV` | exekveringsmiljöns standardvärde | Ange `production` för driftsättning |
| `NEXT_PUBLIC_BASE_URL` | `http://localhost:20128` | Offentlig bas-URL som visas i kontrollpanelen och exponeras för servern (ersätter äldre `BASE_URL`) |
| `NEXT_PUBLIC_CLOUD_URL` | `https://omniroute.dev` | Bas-URL för slutpunkten för molnsynkronisering (ersätter äldre `CLOUD_URL`) |
| `API_KEY_SECRET` | `endpoint-proxy-api-key-secret` | HMAC-hemlighet för genererade API-nycklar |
| `REQUIRE_API_KEY` | `false` | Kräv Bearer-API-nyckel för `/v1/*` |
| `ALLOW_API_KEY_REVEAL` | `false` | Tillåt autentiserade kontrollpanelsanvändare att visa fullständiga lagrade API-nyckelvärden på begäran |
| `PROVIDER_LIMITS_SYNC_INTERVAL_MINUTES` | `70` | Serverns uppdateringsintervall för cachade data om leverantörsgränser; uppdateringsknappar i gränssnittet synkar manuellt |
| `DISABLE_SQLITE_AUTO_BACKUP` | `false` | Inaktivera automatiska SQLite-ögonblicksbilder före skrivning/import/återställning; manuella säkerhetskopior fungerar fortfarande |
| `APP_LOG_TO_FILE` | `true` | Aktiverar skrivning av program- och granskningsloggar till disk |
| `AUTH_COOKIE_SECURE` | `false` | Tvinga autentiseringscookien att använda `Secure` (bakom en omvänd HTTPS-proxy) |
| `CLOUDFLARED_BIN` | ej angivet | Använd en befintlig `cloudflared`-binärfil i stället för en hanterad hämtning |
| `CLOUDFLARED_PROTOCOL` | `http2` | Transport för hanterade Quick Tunnels (`http2`, `quic` eller `auto`) |
| `OMNIROUTE_MEMORY_MB` | `512` | Heapgräns för Node.js i MB |
| `PROMPT_CACHE_MAX_SIZE` | `50` | Maximalt antal poster i promptcachen |
| `SEMANTIC_CACHE_MAX_SIZE` | `100` | Maximalt antal poster i den semantiska cachen |
Fullständig referens för miljövariabler finns i [README](../README.md).
---
## 📊 Tillgängliga modeller
Visa alla tillgängliga modeller
> Listan nedan är sammanställd från `open-sse/config/providerRegistry.ts` för v3.8.0. Molnkataloger (Gemini, OpenRouter osv.) synkroniseras dynamiskt — öppna **Instrumentpanel → Leverantörer → [leverantör] → Tillgängliga modeller** eller anropa `GET /api/models/catalog` för att se hela den aktuella katalogen.
>
> Om en leverantörs inbyggda lista inte längre är aktuell använder du **Importera från /models** på den sidan (eller aktiverar **Automatisk synkronisering**) för att hämta den aktuella katalogen från uppströmskällan. Detta verifierades i v3.8.50 för LLM7.io (`gemini-3.1-flash-lite`) och UncloseAI (`solidrust/Hermes-3-Llama-3.1-8B-AWQ`); anonym åtkomst till Pollinations förblev begränsad av uppströmskällan under samma testomgång.
**Claude Code (`cc/`)** — Pro/Max OAuth: `cc/claude-opus-4-8`, `cc/claude-opus-4-7`, `cc/claude-opus-4-6`, `cc/claude-opus-4-5-20251101`, `cc/claude-sonnet-4-6`, `cc/claude-sonnet-4-5-20250929`, `cc/claude-haiku-4-5-20251001`
**Codex (`cx/`)** — Plus/Pro OAuth: `cx/gpt-5.5` (+ ansträngningsnivåer: `gpt-5.5-xhigh`, `gpt-5.5-high`, `gpt-5.5-medium`, `gpt-5.5-low`), `cx/gpt-5.4`, `cx/gpt-5.4-mini`, `cx/gpt-5.3-codex`, `cx/gpt-5.3-codex-spark`
**GitHub Copilot (`gh/`)** — OAuth: `gh/gpt-5.5`, `gh/gpt-5.4`, `gh/gpt-5.4-mini`, `gh/gpt-5-mini`, `gh/gpt-5.3-codex`, `gh/claude-opus-4.7`, `gh/claude-opus-4.6`, `gh/claude-opus-4-5-20251101`, `gh/claude-sonnet-4.6`, `gh/claude-sonnet-4.5`, `gh/claude-haiku-4.5`, `gh/gemini-3.1-pro-preview`, `gh/gemini-3-flash-preview`, `gh/oswe-vscode-prime`
**Kiro (`kr/`)** — KOSTNADSFRI OAuth: använd den aktuella katalogen som visas under **Instrumentpanel → Leverantörer → Kiro → Tillgängliga modeller**. Tillgängligheten beror på kontot och abonnemanget.
**Qoder (`if/`)** — KOSTNADSFRI OAuth: `if/qwen3.8-max-preview`, `if/qwen3.7-max`, `if/qwen3.7-plus`, `if/kimi-k3`, `if/kimi-k2.7-code`, `if/glm-5.2`, `if/deepseek-v4-pro`, `if/deepseek-v4-flash`, `if/minimax-m3`
**GLM (`glm/`, `glm-cn/`, `zai/`, `glmt/`)** — 0,2–0,6 USD/1M: `glm/glm-5.1`, `glm/glm-5`, `glm/glm-5-turbo`, `glm/glm-4.7`, `glm/glm-4.7-flash`, `glm/glm-4.6`, `glm/glm-4.6v`, `glm/glm-4.5`, `glm/glm-4.5v`, `glm/glm-4.5-air`
**MiniMax (`minimax/`, `minimax-cn/`)** — 0,2 USD/1M: `minimax/MiniMax-M2.7`, `minimax/MiniMax-M2.7-highspeed`, `minimax/MiniMax-M2.5`, `minimax/MiniMax-M2.5-highspeed`
**Kimi (`kimi/`, `kimi-coding/`, `kimi-coding-apikey/`)** — fast pris på 9 USD/mån eller betalning per användning: `kimi/kimi-k2.6`, `kimi/kimi-k2.5`
**DeepSeek (`ds/`)** — API-nyckel: `ds/deepseek-v4-pro`, `ds/deepseek-v4-flash`
**Groq (`groq/`)** — ultrasnabb: `groq/llama-3.3-70b-versatile`, `groq/meta-llama/llama-4-maverick-17b-128e-instruct`, `groq/qwen/qwen3-32b`, `groq/openai/gpt-oss-120b`
**xAI (`xai/`)** — inbyggt stöd för Grok: `xai/grok-4.3`, `xai/grok-4.20-multi-agent-0309`, `xai/grok-4.20-0309-reasoning`, `xai/grok-4.20-0309-non-reasoning`
**Mistral (`mistral/`)** — driftas inom EU: `mistral/mistral-large-latest`, `mistral/mistral-medium-3-5`, `mistral/mistral-small-latest`, `mistral/devstral-latest`, `mistral/codestral-latest`
**Perplexity (`pplx/`)** — sökförstärkt: `pplx/sonar-deep-research`, `pplx/sonar-reasoning-pro`, `pplx/sonar-pro`, `pplx/sonar`
**Together AI (`together/`)** — öppen källkod: `together/meta-llama/Llama-3.3-70B-Instruct-Turbo-Free` (kostnadsfri), `together/meta-llama/Llama-Vision-Free`, `together/deepseek-ai/DeepSeek-R1-Distill-Llama-70B-Free`, `together/deepseek-ai/DeepSeek-R1`, `together/Qwen/Qwen3-235B-A22B`, `together/meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8`
**Fireworks AI (`fireworks/`)** — snabb inferens: `fireworks/accounts/fireworks/models/kimi-k2p6`, `fireworks/accounts/fireworks/models/minimax-m2p7`, `fireworks/accounts/fireworks/models/qwen3p6-plus`, `fireworks/accounts/fireworks/models/glm-5p1`, `fireworks/accounts/fireworks/models/deepseek-v4-pro`
**Cerebras (`cerebras/`)** — i waferskala: `cerebras/zai-glm-4.7`, `cerebras/gpt-oss-120b`
**Cohere (`cohere/`)** — RAG-fokuserad: `cohere/command-a-reasoning-08-2025`, `cohere/command-a-vision-07-2025`, `cohere/command-a-03-2025`, `cohere/command-r-08-2024`
**NVIDIA NIM (`nvidia/`)** — för företag: `nvidia/z-ai/glm-5.1`, `nvidia/minimaxai/minimax-m2.7`, `nvidia/google/gemma-4-31b-it`, `nvidia/mistralai/mistral-small-4-119b-2603`, `nvidia/mistralai/mistral-large-3-675b-instruct-2512`, `nvidia/qwen/qwen3.5-397b-a17b`, `nvidia/deepseek-ai/deepseek-v4-pro`, `nvidia/openai/gpt-oss-120b`, `nvidia/nvidia/nemotron-3-super-120b-a12b`
**Baidu Qianfan (`qianfan/`)** — ERNIE: `qianfan/ernie-5.1`, `qianfan/ernie-5.0-thinking-latest`, `qianfan/ernie-x1.1`
**Ollama Cloud (`ollama-cloud/`)**: `ollama-cloud/deepseek-v4-pro`, `ollama-cloud/deepseek-v4-flash`, `ollama-cloud/kimi-k2.6`, `ollama-cloud/glm-5.1`, `ollama-cloud/minimax-m2.7`, `ollama-cloud/gemma4:31b`, `ollama-cloud/qwen3.5:397b`
**Gemini (Google Cloud `gemini/`)**: Synkroniseras i realtid per API-nyckel från Google — ingen statisk lista. Anslut en nyckel under **Instrumentpanel → Leverantörer** och använd sedan **Tillgängliga modeller** för att importera den aktuella katalogen (t.ex. `gemini/gemini-3-pro`, `gemini/gemini-3-flash`).
**Andra kompatibla leverantörer** (urval): `cohere`, `databricks`, `snowflake`, `together`, `vertex`, `alibaba`, `alibaba-cn`, `bedrock` (via `aws-bedrock`), `azure-ai`, `openrouter` (vidarebefordrad katalog), `siliconflow`, `hyperbolic`, `huggingface`, `featherless-ai`, `cloudflare-ai`, `scaleway`, `deepinfra`, `vercel-ai-gateway`, `bazaarlink`, `friendliai`, `nous-research`, `reka`, `volcengine`, `ai21`, `gigachat`. Var och en underhåller sin egen modellista i `providerRegistry.ts` och kan synkroniseras automatiskt när leverantören exponerar en `/models`-slutpunkt.
**Anmärkning om modell-ID:n:** OmniRoute använder leverantörens egna ID:n (`claude-opus-4-8`, `gpt-5.5`, `glm-5.1`, `MiniMax-M2.7`, `kimi-k2.5`, `grok-4.20-0309-reasoning`). Vissa ID:n innehåller punktavgränsade versioner eftersom det är så uppströms-API:et förväntar sig dem. Om en modell inte finns med ovan kör du `omniroute models --search ` eller anropar `GET /api/models/catalog` för att bekräfta tillgängligheten.
---
## 🧩 Avancerade funktioner
### Anpassade modeller
Lägg till valfritt modell-ID hos valfri leverantör utan att vänta på en appuppdatering:
```bash
# Via API
curl -X POST http://localhost:20128/api/provider-models \
-H "Content-Type: application/json" \
-d '{"provider": "openai", "modelId": "gpt-5.2", "modelName": "GPT-5.2"}'
# Lista: curl http://localhost:20128/api/provider-models?provider=openai
# Ta bort: curl -X DELETE "http://localhost:20128/api/provider-models?provider=openai&model=gpt-5.2"
```
Eller använd instrumentpanelen: **Leverantörer → [Leverantör] → Anpassade modeller**.
Anmärkningar:
- OpenRouter och OpenAI/Anthropic-kompatibla leverantörer hanteras endast från **Tillgängliga modeller**. Manuell tilläggning, import och automatisk synkronisering hamnar alla i samma lista över tillgängliga modeller, så det finns ingen separat sektion för Anpassade modeller för dessa leverantörer.
- Sektionen **Anpassade modeller** är avsedd för leverantörer som inte erbjuder hanterad import av tillgängliga modeller.
### Anpassade OpenAI-kompatibla leverantörer
Valfri gateway som använder OpenAI-API:t (en egenhostad proxy, vLLM eller en tredjepartsaggregator)
kan läggas till som en egen leverantörsnod:
1. **Leverantörer → Lägg till OpenAI-kompatibel**.
2. **Namn**: en visningsetikett för noden.
3. **Prefix**: namnet som används för routning. Klienter anropar modeller som `/`, så en nod med
prefixet `mygw` tillhandahåller `mygw/gpt-4o-mini`. Obligatoriskt; det finns inga teckenbegränsningar.
4. **API-typ**: den endpointfamilj som gatewayen tillhandahåller (Chat Completions, Responses,
Embeddings, ljud, bilder).
5. **Bas-URL**: API-roten, till och med `/v1` (till exempel
`https://gateway.example.com/v1`), inte den fullständiga sökvägen `/chat/completions`. Gatewayer med
icke-standardiserade sökvägar anger dem under **Avancerade inställningar** (chattsökväg, modellsökväg).
6. Fältet **API-nyckel (för kontroll)** testar endast anslutningen. När noden har skapats
öppnar du den och använder **Lägg till anslutning** för att lagra nyckeln som förfrågningarna ska använda.
Noden får ett internt ID i formatet `openai-compatible--`; du behöver aldrig
skriva in det, eftersom prefixet är det publika namnet.
#### Reserverade prefix
Ett prefix får inte vara ID:t eller aliaset för en inbyggd leverantör (till exempel `openai`, `cf`) eller
ID:t för en avvecklad leverantör. Modellmatcharen kontrollerar inbyggda ID:n och alias innan
anpassade noder, så en nod som använder ett sådant prefix skulle aldrig ta emot trafik:
`/model` skulle i stället gå till den inbyggda leverantören eller nekas om den leverantören
har avvecklats. Försök att skapa eller redigera en nod med ett sådant prefix avvisas med:
```text
prefix: "" är ett reserverat leverantörsprefix — välj ett annat prefix (reserverade ID:n/alias kan inte användas för anpassade noder eftersom förfrågningar som /model dirigeras till en inbyggd leverantör eller nekas när leverantören har avvecklats)
```
Välj ett unikt prefix (`mygw`, `acme-proxy`). Om förfrågningar till en anpassad nod misslyckas med ett
fel som nämner en inbyggd leverantör eller dess autentiseringsuppgifter bör du kontrollera om nodens prefix är
reserverat: noder som sparades innan den här regeln infördes finns fortfarande kvar, men deras prefix dirigerar till
den inbyggda leverantören. Redigera noden och ge den ett nytt prefix.
### Kedjekoppling av OmniRoute-noder
En annan OmniRoute-gateway kan läggas till som en **anpassad OpenAI-kompatibel** leverantör. Använd
motpartens `/v1`-bas-URL och en särskild API-nyckel med minsta möjliga behörighet som har utfärdats av den motparten.
För ömsesidiga kedjor eller kedjor med flera hopp aktiverar du det valfria loopskyddet på varje gateway:
```bash
# gateway-a
OMNIROUTE_INSTANCE_ID=gateway-a
OMNIROUTE_PEER_URLS=http://gateway-b:20128/v1
OMNIROUTE_PEER_MAX_HOPS=4
```
```bash
# gateway-b
OMNIROUTE_INSTANCE_ID=gateway-b
OMNIROUTE_PEER_URLS=http://gateway-a:20128/v1
OMNIROUTE_PEER_MAX_HOPS=4
```
Endast förfrågningar som skickas till en uttryckligen tillåten motparts-URL får
headern `X-OmniRoute-Peer-Trace`. En gateway avvisar ett upprepat instans-ID eller en förbrukad
hoppbudget med HTTP `508 Loop Detected`; vanliga uppströmsleverantörer får inga metadata om motparter.
Kedjekoppling av motparter är inte databasreplikering eller redundansväxling mellan värdar. Varje gateway har separat
SQLite-tillstånd, cacheminnen, hastighetsräknare och sessioner. Använd en hälsokontrollerad omvänd proxy eller
redundansväxling på klientsidan för aktiv/passiv eller aktiv/aktiv tillgänglighet, och montera aldrig en SQLite-databas
i flera OmniRoute-instanser som körs samtidigt.
### Dedikerade leverantörsrutter
Dirigera förfrågningar direkt till en specifik leverantör med modellvalidering:
```bash
POST http://localhost:20128/v1/providers/openai/chat/completions
POST http://localhost:20128/v1/providers/openai/embeddings
POST http://localhost:20128/v1/providers/fireworks/images/generations
```
Leverantörsprefixet läggs till automatiskt om det saknas. Modeller som inte matchar returnerar `400`.
### Konfiguration av nätverksproxy
```bash
# Ange global proxy
curl -X PUT http://localhost:20128/api/settings/proxy \
-d '{"global": {"type":"http","host":"proxy.example.com","port":"8080"}}'
# Proxy per leverantör
curl -X PUT http://localhost:20128/api/settings/proxy \
-d '{"providers": {"openai": {"type":"socks5","host":"proxy.example.com","port":"1080"}}}'
# Testa proxy
curl -X POST http://localhost:20128/api/settings/proxy/test \
-d '{"proxy":{"type":"socks5","host":"proxy.example.com","port":"1080"}}'
```
**Prioritetsordning:** Nyckelspecifik → Kombinationsspecifik → Leverantörsspecifik → Global → Miljö.
### API för modellkatalog
```bash
curl http://localhost:20128/api/models/catalog
```
Returnerar modeller grupperade efter leverantör med typer (`chat`, `embedding`, `image`).
### Molnsynkronisering
- Synkronisera leverantörer, kombinationer och inställningar mellan enheter
- Automatisk bakgrundssynkronisering med tidsgräns + snabbt avbrott vid fel
- Föredra `NEXT_PUBLIC_BASE_URL`/`NEXT_PUBLIC_CLOUD_URL` på serversidan i produktion
### Snabb Cloudflare-tunnel
- Tillgängligt under **Instrumentpanel → Slutpunkter** för Docker och andra egenhostade distributioner
- Skapar en tillfällig `https://*.trycloudflare.com`-URL som vidarebefordrar till din aktuella OpenAI-kompatibla `/v1`-slutpunkt
- Vid den första aktiveringen installeras `cloudflared` endast vid behov; efterföljande omstarter återanvänder samma hanterade binärfil
- Quick Tunnels återställs inte automatiskt efter en omstart av OmniRoute eller containern; återaktivera dem från instrumentpanelen vid behov
- Tunnel-URL:er är tillfälliga och ändras varje gång du stoppar/startar tunneln
- Hanterade Quick Tunnels använder HTTP/2-transport som standard för att undvika störande varningar om QUIC:s UDP-buffert i resursbegränsade containrar
- Ange `CLOUDFLARED_PROTOCOL=quic` eller `auto` om du vill åsidosätta det hanterade transportvalet
- Ange `CLOUDFLARED_BIN` om du föredrar att använda en förinstallerad `cloudflared`-binärfil i stället för den hanterade nedladdningen
- Panelerna för Cloudflare Quick Tunnel, Tailscale Funnel och ngrok Tunnel kan visas eller döljas under **Inställningar → Utseende**. Att dölja en panel stoppar inte en tunnel som körs.
### LLM-gatewayintelligens (fas 9)
- **Semantisk cache** — Cachelagrar automatiskt icke-strömmande svar med temperature=0 (kringgå med `X-OmniRoute-No-Cache: true`)
- **Idempotens för begäranden** — Tar bort dubbletter av begäranden inom 5 sekunder via headern `Idempotency-Key` eller `X-Request-Id`
- **Förloppsspårning** — Valfria SSE-händelser av typen `event: progress` via headern `X-OmniRoute-Progress: true`
---
### Översättningsverktyg
Öppna via **Instrumentpanel → Översättare**. Felsök och visualisera hur OmniRoute översätter API-begäranden mellan leverantörer.
| Läge | Syfte |
| ------------------- | ------------------------------------------------------------------------------------- |
| **Testmiljö** | Välj käll-/målformat, klistra in en begäran och se det översatta resultatet direkt |
| **Chatttestare** | Skicka chattmeddelanden i realtid via proxyn och granska hela begärande-/svarscykeln |
| **Testbänk** | Kör batchtester över flera formatkombinationer för att verifiera korrekt översättning |
| **Liveövervakning** | Se översättningar i realtid när begäranden flödar genom proxyn |
**Användningsfall:**
- Felsök varför en viss kombination av klient och leverantör misslyckas
- Verifiera att tanketaggar, verktygsanrop och systeminstruktioner översätts korrekt
- Jämför formatskillnader mellan formaten OpenAI, Claude, Gemini och Responses API
---
### Routningsstrategier
Konfigurera via **Instrumentpanel → Inställningar → Routning**. Instrumentpanelen visar de sex mest använda strategierna; kombinationer och den automatiska routern stöder internt ett bredare urval.
**Strategier som visas på instrumentpanelen (routning på kontonivå):**
| Strategi | Beskrivning |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Fyll första** | Använder konton i prioritetsordning — primärkontot hanterar alla begäranden tills det blir otillgängligt |
| **Turordning** | Växlar mellan alla konton med en konfigurerbar beständighetsgräns (standard: 3 anrop per konto) |
| **P2C (tvåvalsprincipen)** | Väljer 2 slumpmässiga konton och routar till det som har bäst hälsa — balanserar belastningen med hänsyn till hälsostatus |
| **Slumpmässig** | Väljer slumpmässigt ett konto för varje begäran med Fisher–Yates-blandning |
| **Minst använd** | Routar till kontot med den äldsta `lastUsedAt`-tidsstämpeln och fördelar trafiken jämnt |
| **Kostnadsoptimerad** | Routar till kontot med det lägsta prioritetsvärdet och optimerar för leverantörer med lägst kostnad |
**Avancerade kombinations- och automatiska strategier** (kan konfigureras per kombination eller via prefix av typen `auto/*` — se [AUTO-COMBO.md](../routing/AUTO-COMBO.md)):
- `priority` — strikt ordning, använder aldrig turordning
- `weighted` — proportionell trafikfördelning baserad på vikter per modell
- `fill-first` — använder den första modellen tills gränserna nås
- `round-robin` / `strict-random` / `random`
- `p2c` (tvåvalsprincipen)
- `least-used` och `cost-optimized`
- `auto` — poängbaserat val bland alla kandidater
- `lkgp` (senast fungerande leverantör) — låser till den senast framgångsrika leverantören och faller sedan tillbaka på regler
- `context-optimized` — väljer modellen med det största lediga kontextfönstret
- `context-relay` — kedjar modeller med lång kontext för uppföljande turer
#### Extern header för beständiga sessioner
För extern sessionsaffinitet (till exempel Claude Code-/Codex-agenter bakom omvända proxyservrar), skicka:
```http
X-Session-Id: your-session-key
```
OmniRoute accepterar även `x_session_id` och returnerar den effektiva sessionsnyckeln i `X-OmniRoute-Session-Id`.
Om du använder Nginx och skickar headers med understreck, aktivera:
```nginx
underscores_in_headers on;
```
#### Modellalias med jokertecken
Skapa mönster med jokertecken för att mappa om modellnamn:
```
Pattern: claude-sonnet-* → Target: cc/claude-sonnet-4-6
Pattern: gpt-* → Target: gh/gpt-5.3-codex
```
Jokertecken stöder `*` (valfria tecken) och `?` (ett enskilt tecken).
#### Reservkedjor
Definiera globala reservkedjor som gäller för alla begäranden:
```
Chain: production-fallback
1. cc/claude-opus-4-7
2. gh/gpt-5.3-codex
3. glm/glm-4.7
```
---
### Vanliga leverantörskombinationer och routningsmönster
Här är exempelmönster för hur du kombinerar flera leverantörer och routar mellan dem i OmniRoute:
#### 1. Kombination för kodningsagenter: avancerat resonemang med kostnads-/hastighetsbaserad reservlösning
Perfekt för kodningsagenter (OpenCode, Claude Code, Cursor, Cline). Routar inledningsvis till avancerade resonemangsmodeller och faller tillbaka på snabba kodningsmodeller när kvoten tar slut eller fel uppstår.
- **Instrumentpanel**: Kombinationer → Ny kombination → Namn: `agent-coding` → Strategi: `Priority`
- **Modeller**:
1. `claude/claude-sonnet-4-6` (Primär kodningsagent)
2. `openai/gpt-4o` (Sekundär reservlösning med hög kapacitet)
3. `deepseek/deepseek-v4-flash` (Högeffektiv och kostnadseffektiv reservlösning)
```bash
# Exempel via API
curl -X POST http://localhost:20128/api/combos \
-H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "agent-coding",
"strategy": "priority",
"models": [
{ "model": "claude/claude-sonnet-4-6" },
{ "model": "openai/gpt-4o" },
{ "model": "deepseek/deepseek-v4-flash" }
]
}'
```
#### 2. Kombination med automatisk redundansväxling för gratisnivåer
Kedjar samman flera leverantörer med gratisnivåer och utan krav på API-nyckel för att maximera drifttiden utan API-kostnader.
- **Strategi**: `Least Used` eller `Round Robin` (fördelar belastningen mellan kvoter)
- **Modeller**:
1. `groq/llama-3.3-70b-versatile`
2. `gemini/gemini-2.5-flash`
3. `cerebras/gpt-oss-120b`
```bash
# Exempel via CLI
omniroute combo create free-stack \
--models "groq/llama-3.3-70b-versatile,gemini/gemini-2.5-flash,cerebras/gpt-oss-120b" \
--strategy round-robin
```
#### 3. Multimodal pipeline för bild och text
Kombinerar specialiserade bildmodeller med snabb textgenerering för arbetsflöden som innefattar bildförståelse och kodgenerering.
- **Mönster**: En `Priority`-kombination som listar modeller med bildstöd först och en text-/kodmodell med hög kapacitet sist.
- **Modeller**:
1. `gemini/gemini-2.5-pro` (Stark förståelse av bilder och multimodalt innehåll)
2. `openai/gpt-4o` (Balanserad bildförståelse och verktygsanvändning)
3. `deepseek/deepseek-v4-flash` (Text-/kodgenerering)
---
### Feltålighet och kretsbrytare
Konfigurera via **Instrumentpanel → Inställningar → Feltålighet**.
OmniRoute implementerar feltålighet på leverantörsnivå med fem komponenter:
1. **Begärandekö och takthållning** — Systemövergripande styrning av begäranden:
- **Begäranden per minut (RPM)** — Maximalt antal begäranden per minut och konto
- **Minsta tid mellan begäranden** — Minsta intervall i millisekunder mellan begäranden
- **Maximalt antal samtidiga begäranden** — Maximalt antal samtidiga begäranden per konto
2. **Anslutningskarantän** — Konfiguration per autentiseringstyp för en enskild anslutning efter fel som kan försökas igen:
- **Grundläggande karantäntid** — Standardperiod för karantän vid fel uppströms som kan försökas igen
- **Använd uppströms återförsöksanvisningar** — Följer auktoritativa `Retry-After`-anvisningar eller återställningsanvisningar när sådana anges
- **Maximalt antal backoff-steg** — Högsta exponentiella backoff-nivå vid upprepade fel
3. **Kretsbrytare för leverantör** — Spårar leverantörsfel från början till slut, markerar en leverantör som försämrad vid det konfigurerade varningströskelvärdet och öppnar kretsbrytaren när det konfigurerade feltröskelvärdet uppnås:
- **Tröskelvärde för försämring** — Antal leverantörsfel i följd innan tillståndet `DEGRADED` aktiveras
- **Feltröskelvärde** — Antal leverantörsfel i följd innan tillståndet `OPEN` aktiveras
- **Tidsgräns för återställning** — Tidsperiod innan leverantören testas igen
- **CLOSED** (Fungerar normalt) — Begäranden flödar normalt
- **DEGRADED** — Begäranden fortsätter att flöda medan den förhöjda felfrekvensen övervakas
- **OPEN** — Leverantören blockeras tillfälligt efter upprepade fel
- **HALF_OPEN** — Testar om leverantören har återhämtat sig
Anslutningsspecifika hastighetsbegränsningar med `429` hanteras av **Anslutningskarantän** och räknas inte in i leverantörens kretsbrytare.
Kretsbrytarens körtidstillstånd visas endast under **Instrumentpanel → Hälsa**.
4. **Vänta på att karantäntiden löper ut** — Om alla möjliga anslutningar redan befinner sig i karantän kan OmniRoute vänta tills den tidigaste karantäntiden löper ut och automatiskt försöka utföra samma klientbegäran igen.
5. **Automatisk identifiering av hastighetsbegränsning** — När uppströmsleverantörer returnerar uttryckliga väntetider åsidosätter dessa anvisningar den lokala karantäntiden för anslutningen när inställningen är aktiverad.
**Proffstips:** Använd sidan **Hälsa** för att inspektera och återställa aktiva kretsbrytare för leverantörer efter ett driftavbrott. Sidan Feltålighet ändrar endast konfigurationen.
---
### Export/import av databas
Hantera säkerhetskopior av databasen under **Instrumentpanel → Inställningar → System och lagring**.
| Åtgärd | Beskrivning |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Exportera databas** | Hämtar den aktuella SQLite-databasen som en `.sqlite`-fil |
| **Exportera allt (.tar.gz)** | Hämtar ett fullständigt säkerhetskopieringsarkiv som innehåller databas, inställningar, kombinationer, leverantörsanslutningar (inga inloggningsuppgifter) och metadata för API-nycklar |
| **Importera databas** | Laddar upp en `.sqlite`-fil som ersätter den aktuella databasen. En säkerhetskopia före import skapas automatiskt om inte `DISABLE_SQLITE_AUTO_BACKUP=true` |
```bash
# API: Exportera databas
curl -o backup.sqlite http://localhost:20128/api/db-backups/export
# API: Exportera allt (fullständigt arkiv)
curl -o backup.tar.gz http://localhost:20128/api/db-backups/exportAll
# API: Importera databas
curl -X POST http://localhost:20128/api/db-backups/import \
-F "file=@backup.sqlite"
```
**Importvalidering:** Den importerade filens integritet (SQLite-pragma-kontroll), obligatoriska tabeller (`provider_connections`, `provider_nodes`, `combos`, `api_keys`) och storlek (högst 100 MB) valideras.
**Användningsfall:**
- Migrera OmniRoute mellan datorer
- Skapa externa säkerhetskopior för katastrofåterställning
- Dela konfigurationer mellan teammedlemmar (exportera allt → dela arkivet)
---
### Inställningspanel
Inställningssidan är indelad i **7 flikar** för enkel navigering:
| Flik | Innehåll |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Allmänt** | Verktyg för systemlagring, standardbeteende, synlighet för endpoint-tunnlar |
| **Utseende** | Temakontroller (ljust/mörkt/system), sidofältets synlighet, panelväxlar för tunnelkort från Cloudflare/Tailscale/ngrok |
| **AI** | Tankebudget (vidarebefordring / automatisk borttagning / anpassad / adaptiv — se [THINKING_BUDGET.md](./THINKING_BUDGET.md)), global systemprompt, statistik för promptcache |
| **Säkerhet** | Inställningar för inloggning/lösenord, IP-åtkomstkontroll, API-autentisering för `/models`, blockering av leverantörer, skydd mot promptinjektioner |
| **Routning** | Global routningsstrategi (Fyll först / Round Robin / P2C / Slumpmässig / Minst använd / Kostnadsoptimerad), jokerteckenalias för modeller, reservkedjor, kombinationsstandarder |
| **Resiliens** | Begärandekö, anslutningens nedkylningsperiod, konfiguration av leverantörsbrytare och beteende för väntan på nedkylning |
| **Avancerat** | Global proxykonfiguration (HTTP/SOCKS5), leverantörsspecifika proxyåsidosättningar |
Allmänt duplicerar inte längre skrivskyddade anteckningar om loggning och cache. Inställningar för databaslagring och
optimering sparas via `/api/settings/database`; manuell cacherensning använder
`DELETE /api/cache`. Radgränser för begärande- och proxyloggar styrs av
`CALL_LOGS_TABLE_MAX_ROWS` och `PROXY_LOGS_TABLE_MAX_ROWS`.
---
### Kostnads- och budgethantering
Öppnas via **Instrumentpanel → Kostnader**.
| Flik | Syfte |
| ---------------- | ------------------------------------------------------------------------------------------------ |
| **Budget** | Ange utgiftsgränser per API-nyckel med dagliga/veckovisa/månatliga budgetar och realtidsspårning |
| **Prissättning** | Visa och redigera modellpriser — kostnad per 1 000 indata-/utdatatoken per leverantör |
```bash
# API: Ange en budget
curl -X POST http://localhost:20128/api/usage/budget \
-H "Content-Type: application/json" \
-d '{"keyId": "key-123", "limit": 50.00, "period": "monthly"}'
# API: Hämta aktuell budgetstatus
curl http://localhost:20128/api/usage/budget
```
**Kostnadsspårning:** Varje begäran loggar tokenanvändning och beräknar kostnaden med hjälp av pristabellen. Visa uppdelningar i **Instrumentpanel → Användning** efter leverantör, modell och API-nyckel.
---
### Ljudtranskribering
OmniRoute stöder ljudtranskribering via den OpenAI-kompatibla endpointen:
```bash
POST /v1/audio/transcriptions
Authorization: Bearer your-api-key
Content-Type: multipart/form-data
# Exempel med curl
curl -X POST http://localhost:20128/v1/audio/transcriptions \
-H "Authorization: Bearer your-api-key" \
-F "file=@audio.mp3" \
-F "model=openai/whisper-1"
```
`deepgram/nova-3` är den inbyggda Deepgram-rutten och kräver en Deepgram API-nyckel.
Om endast OpenRouter är konfigurerat använder du `openrouter/deepgram/nova-3`.
Leverantörer för **tal-till-text (transkribering)**:
- `openai/` (whisper-kompatibel)
- `groq/` (Groq Whisper Turbo)
- `deepgram/` (Nova-familjen)
- `assemblyai/`
- `nvidia/` (Parakeet, Canary)
- `huggingface/` (whisper-varianter)
- `qwen/`
Leverantörer för **text-till-tal (`POST /v1/audio/speech`)**:
- `openai/` (tts-1, tts-1-hd)
- `hyperbolic/`
- `deepgram/` (Aura)
- `nvidia/` (Magpie TTS)
- `elevenlabs/`
- `huggingface/`
- `inworld/`
- `cartesia/`
- `playht/`
- `kie/`
- `aws-polly/`
- `xiaomi-mimo/`
- `coqui/`, `tortoise/`
- `qwen/`
Ljudformat som stöds för transkribering: `mp3`, `wav`, `m4a`, `flac`, `ogg`, `webm`. Utdataformat för TTS beror på leverantören (mp3, wav, opus, pcm, mulaw).
---
### Balanseringsstrategier för kombinationer
Konfigurera balansering per kombination i **Instrumentpanel → Kombinationer → Skapa/Redigera → Strategi**.
| Strategi | Beskrivning |
| --------------------- | --------------------------------------------------------------------------------------- |
| **Round-Robin** | Roterar sekventiellt mellan modeller |
| **Prioritet** | Försöker alltid med den första modellen och använder endast reservvägen vid fel |
| **Slumpmässig** | Väljer en slumpmässig modell från kombinationen för varje begäran |
| **Viktad** | Routar proportionellt baserat på tilldelade vikter per modell |
| **Minst använd** | Routar till modellen med minst antal nyliga begäranden (använder kombinationsmätvärden) |
| **Kostnadsoptimerad** | Routar till den billigaste tillgängliga modellen (använder pristabellen) |
Globala standardvärden för kombinationer kan anges i **Instrumentpanel → Inställningar → Routning → Kombinationsstandarder**.
Tidsgränser för kombinationsmål ärver som standard den aktuella tidsgränsen för begäranden. Använd **Tidsgräns för mål
(sekunder)** i kombinationsstandarderna eller för en enskild kombination endast när en kortare gräns per mål ska
utlösa snabbare reservväxling.
Kombinationsoptimeringar med noll latens är valfria och måste aktiveras uttryckligen. Lämna **Optimeringar med noll latens** inaktiverat för att
förhindra att dessa latensfunktioner konkurrerar med reservmål, hoppar över mål baserat på historik för TTFT
eller komprimerar reservbegäranden. Om funktionen aktiveras kan konfigurerad hedging, prediktiva TTFT-
överhoppningar och proaktiv komprimering av reservbegäranden användas för att byta routnings-/begärandetrohet mot lägre
svanslatens.
Inaktivera **buffert för resonemangstoken** när uppströmsleverantörer kräver strikta gränser för
`max_tokens` / `maxOutputTokens`. När funktionen är aktiverad lägger kombinerad dirigering endast till
extra utrymme för resonemangsmodeller med en känd utdatakapacitet och lämnar klientens tokengräns oförändrad när det
säkra buffrade värdet skulle överskrida denna kapacitet. Om klientens gräns redan överstiger en känd kapacitet
begränsar OmniRoute den till denna kapacitet innan begäran skickas uppströms.
---
### Hälsopanel
Öppna via **Instrumentpanel → Hälsa**. Systemets hälsostatus i realtid visas på sex kort:
| Kort | Vad det visar |
| --------------------- | ------------------------------------------------------------------ |
| **Systemstatus** | Drifttid, version, minnesanvändning, datakatalog |
| **Leverantörshälsa** | Global körningsstatus för leverantörernas kretsbrytare |
| **Hastighetsgränser** | Aktiva anslutningsspärrar per konto med återstående tid |
| **Aktiva spärrar** | Aktiva modellspecifika spärrar och tillfälliga undantag |
| **Signaturcache** | Statistik för dedupliceringscachen (aktiva nycklar, träfffrekvens) |
| **Latensmätning** | Aggregerad p50-/p95-/p99-latens per leverantör |
**Proffstips:** Hälsosidan uppdateras automatiskt var tionde sekund. Använd kretsbrytarkortet för att identifiera vilka leverantörer som har problem.
---
## 🤖 Automatisk dirigering (nollkonfiguration)
OmniRoute levereras med en **poängstyrd automatisk router** som väljer den bästa modellen för varje begäran bland alla anslutna leverantörer — ingen kombination behöver underhållas. Skicka bara begäran med ett av prefixen `auto/*`, så skapar OmniRoute en virtuell kombination dynamiskt och poängsätter kandidater utifrån latens, kostnad, lyckandefrekvens, kontextpassning, modellens lämplighet för uppgiften, senaste fel, kvot och kretsbrytarens tillstånd.
| Prefix | Optimerar för |
| -------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `auto` | Balanserad standardinställning (latens × kostnad × lyckandefrekvens) |
| `auto/coding` | Kodningsuppgifter: föredrar Claude, GPT-5, GLM, Kimi, Qwen Coder och DeepSeek-kodmodeller |
| `auto/cheap` | Lägsta $/token, accepterar högre latens |
| `auto/fast` | Lägsta latens, ignorerar kostnaden |
| `auto/offline` | Endast lokala leverantörer (Ollama, vLLM, llama.cpp) — användbart för isolerade miljöer |
| `auto/smart` | Resoneringskvalitet först (Opus, GPT-5 xhigh, R1, GLM 5.1 reasoning) |
| `auto/lkgp` | ”Senast kända fungerande leverantör” — låser till den senast fungerande leverantören och använder sedan regler som reserv |
Exempel:
```bash
curl -X POST http://localhost:20128/v1/chat/completions \
-H "Authorization: Bearer $OMNIROUTE_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "auto/coding",
"messages": [{ "role": "user", "content": "Refaktorera den här Python-funktionen" }],
"stream": true
}'
```
Den automatiska routern beskrivs i sin helhet i [AUTO-COMBO.md](../routing/AUTO-COMBO.md) — inklusive hur du finjusterar poängvikter, svartlistar leverantörer och granskar dirigeringsbeslut under **Kontrollpanel → Automatisk kombination**.
---
## 🔌 MCP- och A2A-integration
OmniRoute är både en **MCP-server** (Model Context Protocol) och en **A2A-server** (Agent-to-Agent JSON-RPC 2.0). Alla MCP-kompatibla IDE:er och agentvärdar kan anropa OmniRoute-verktyg direkt — inget extra omslag krävs.
### MCP-transporter
- **SSE**: `http://localhost:20128/api/mcp/sse`
- **Strömningsbar HTTP**: `http://localhost:20128/api/mcp/stream`
- **stdio**: `omniroute --mcp` (för IDE-insticksprogram som föredrar stdio)
### Anslut Claude Desktop
Redigera `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) eller motsvarande fil i Windows/Linux:
```json
{
"mcpServers": {
"omniroute": {
"command": "omniroute",
"args": ["--mcp"]
}
}
}
```
### Anslut Cursor / Continue / VS Code MCP
Använd SSE-URL:en `http://localhost:20128/api/mcp/sse` och en Bearer-API-nyckel som skapats under **Kontrollpanel → API-nycklar**.
### Omfattningar
MCP definierar för närvarande 32 namngivna omfattningar. Varje Bearer-nyckel kan begränsas till specifika omfattningar — se [MCP-SERVER.md](../frameworks/MCP-SERVER.md) för den auktoritativa förteckningen över omfattningar och verktyg samt [A2A-SERVER.md](../frameworks/A2A-SERVER.md) för JSON-RPC-schemat.
---
## 🧠 Färdighetssystem
OmniRoute erbjuder ett utökningsbart **ramverk för färdigheter** (`src/lib/skills/`) så att agenter och A2A-slutpunkten kan köra domänspecifika rutiner (t.ex. `code-review`, `summarize`, `extract-facts`, `web-research`).
- **Marknadsplatsgränssnitt** — Bläddra bland och installera färdigheter via **Instrumentpanel → Färdigheter**
- **Omfattningar per nyckel** — Begränsa vilka API-nycklar som kan anropa vilka färdigheter
- **Anpassade färdigheter** — Lägg en TypeScript-fil i `src/lib/a2a/skills/`, registrera den, så kan den omedelbart anropas via A2A
Fullständig referens: [SKILLS.md](../frameworks/SKILLS.md).
---
## 💾 Minnessystem
OmniRoute lagrar **långsiktigt konversationsminne** med hybridsökning:
- **SQLite FTS5** för nyckelordssökning i tidigare konversationsturer
- **Qdrant-vektorlager** (valfritt) för semantisk återkallning
- **Automatisk faktaextrahering** — entiteter, preferenser och beslut sammanfattas efter varje session och lagras i tabellen `memory_facts`
- Minnen avgränsas per API-nyckel och per session
Hantera minnen via **Instrumentpanel → Minne** (sök, redigera, exportera, rensa). HTTP-gränssnittet (`/api/memory/*`) låter agenter lägga till och söka efter fakta programmatiskt — se [MEMORY.md](../frameworks/MEMORY.md).
---
## 🔔 Webhooks
Prenumerera på OmniRoute-händelser för övervakning och automatisering i realtid.
- Skapa en webhook via **Instrumentpanel → Webhooks** med mål-URL och en HMAC-signeringshemlighet
- Tillgängliga händelser: `request.completed`, `request.failed`, `provider.unavailable`, `budget.exceeded`, `combo.switched`, `circuit_breaker.opened`, `circuit_breaker.closed`
- Varje nyttolast innehåller `X-OmniRoute-Signature` (HMAC-SHA256) för verifiering
- Återförsök: 3 försök med exponentiell väntetid, därefter kö för obearbetade meddelanden
Fullständigt schema finns i [WEBHOOKS.md](../frameworks/WEBHOOKS.md).
---
## ☁️ Molnagenter
OmniRoute integreras med molnbaserade kodningsagenter (**OpenAI Codex Cloud**, **Devin**, **Jules**, **Antigravity**) så att du kan skicka långvariga uppgifter från samma instrumentpanel som hanterar din lokala routning.
- Skapa uppgifter via **Instrumentpanel → Molnagenter** eller `POST /api/v1/agents/tasks`
- Följ status, loggar och artefakter för varje uppgift
- Använd en egen API-nyckel per leverantör — autentiseringsuppgifterna lämnar aldrig OmniRoute-instansen
Fullständig referens: [CLOUD_AGENT.md](../frameworks/CLOUD_AGENT.md).
---
## 🛠️ Programmatisk hantering
Du kan hantera alla OmniRoute-resurser (leverantörer, kombinationer, nycklar, inställningar) via HTTP med en **Bearer-nyckel som har omfattningen `manage`**.
Generera nyckeln via **Instrumentpanel → API-nycklar → Ny nyckel → Omfattning: manage** och kör sedan:
```bash
# Lista leverantörer
curl http://localhost:20128/api/providers \
-H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY"
# Lägg till en leverantörsanslutning
curl -X POST http://localhost:20128/api/providers \
-H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
-H "Content-Type: application/json" \
-d '{ "provider": "openai", "apiKey": "sk-...", "name": "main" }'
# Skapa en kombination
curl -X POST http://localhost:20128/api/combos \
-H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "premium", "strategy": "priority", "models": [{ "model": "cc/claude-opus-4-7" }, { "model": "glm/glm-5.1" }] }'
# Lista/skapa API-nycklar
curl http://localhost:20128/api/keys -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY"
curl -X POST http://localhost:20128/api/keys -H "Authorization: Bearer $OMNIROUTE_MANAGE_KEY" \
-d '{ "name": "ci-bot", "scopes": ["chat"] }'
```
Se [API_REFERENCE.md](../reference/API_REFERENCE.md) för den fullständiga katalogen över slutpunkter och scheman för begäranden/svar.
---
## 💻 Internt CLI
OmniRoute levereras med ett internt CLI (`omniroute …`) för konfiguration, diagnostik och körningskontroll. Detta är **separat från sidan "CLI-verktyg" i kontrollpanelen**, där CLI-verktyg från tredje part (Claude Code, Cursor, Codex, Cline, …) konfigureras så att de kan kommunicera med OmniRoute.
```bash
omniroute setup # Interaktiv guide (lösenord, leverantörer, kombinationer)
omniroute setup --non-interactive # Anpassat för CI
omniroute doctor # Hälsodiagnostik (datakatalog, databas, leverantörer, portar)
omniroute providers available # Lista leverantörer som stöds
omniroute providers list # Lista konfigurerade anslutningar
omniroute providers test # Testa en leverantörsanslutning i realtid
omniroute combos list # Lista kombinationer
omniroute combos switch # Ange standardkombination
omniroute models # Lista tillgängliga modeller (--json, --search)
omniroute keys add | list | remove # Hantera API-nycklar från terminalen
omniroute backup # Skapa en ögonblicksbild av konfigurationen och databasen
omniroute restore [] # Återställ från en ögonblicksbild
omniroute health # Detaljerad hälsa (brytare, cache, minne)
omniroute quota # Leverantörernas kvotanvändning
omniroute mcp status # MCP-serverns status
omniroute a2a status # A2A-serverns status
omniroute tunnel list|create|stop # Cloudflare-/Tailscale-/ngrok-tunnlar
omniroute reset-password # Återställ administratörslösenordet
omniroute --mcp # Starta MCP-servern via stdio
omniroute --port 3000 # Starta servern på en anpassad port
```
Tips: kombinera `omniroute doctor --json` med ditt övervakningsverktyg för att få varningar om leverantörsanslutningar med felstatus.
---
## 🖥️ Skrivbordsapplikation (Electron)
OmniRoute finns som en inbyggd skrivbordsapplikation för Windows, macOS och Linux.
### Installation
```bash
# Från electron-katalogen:
cd electron
npm install
# Utvecklingsläge (anslut till en Next.js-utvecklingsserver som körs):
npm run dev
# Produktionsläge (använder fristående bygge):
npm start
```
### Bygga installationsprogram
```bash
cd electron
npm run build # Aktuell plattform
npm run build:win # Windows (.exe NSIS)
npm run build:mac # macOS (.dmg universal)
npm run build:linux # Linux (.AppImage)
```
Utdata → `electron/dist-electron/`
### Viktiga funktioner
| Funktion | Beskrivning |
| -------------------------------- | ----------------------------------------------------------------- |
| **Serverberedskap** | Kontrollerar servern innan fönstret visas (ingen tom skärm) |
| **Systemfält** | Minimera till systemfältet, byt port och avsluta från fältmenyn |
| **Porthantering** | Byt serverport från systemfältet (servern startas om automatiskt) |
| **Policy för innehållssäkerhet** | Restriktiv CSP via sessionshuvuden |
| **Enskild instans** | Endast en appinstans kan köras åt gången |
| **Offlineläge** | Den medföljande Next.js-servern fungerar utan internet |
### Miljövariabler
| Variabel | Standardvärde | Beskrivning |
| --------------------- | ------------- | ------------------------------------ |
| `OMNIROUTE_PORT` | `20128` | Serverport |
| `OMNIROUTE_MEMORY_MB` | `512` | Heap-gräns för Node.js (64–16384 MB) |
📖 Fullständig dokumentation: [`electron/README.md`](../../electron/README.md)