Lewati ke isi

9Router — LLM Gateway

1 endpoint, 40+ provider, support free tier kayak Kiro. Bot lo tinggal nunjuk ke 9router, ga perlu daftar 5-10 API key.

Apa itu 9Router

9Router itu router/gateway untuk LLM. Konsep mirip OpenRouter, tapi lebih powerful karena:

  1. Self-hosted (jalan di VPS lo sendiri, port 20128)
  2. Support subscription provider (Claude Code Pro, Codex Plus, GitHub Copilot) — quota subscription lo masih kepake
  3. Support free provider (Kiro AI, OpenCode Free, Vertex AI free credit) — Claude unlimited gratis lewat Kiro
  4. Auto-fallback tier: Subscription → Cheap → Free, zero downtime
  5. RTK Token Saver — kompres tool_result, hemat 20-40% token per request
  6. Multi-account round-robin per provider
  7. OpenAI-compatible API (gampang integrate ke kode apapun)

Hasil: bot lo bisa pake Claude Sonnet 4.5 / GLM-5 / Gemini / DeepSeek dari 1 endpoint, ga perlu nge-juggle banyak API key.

Arsitektur

┌──────────────────┐
│   Kai (agent)    │
│   main.py        │
└────────┬─────────┘
         │ OPENAI_BASE_URL=http://127.0.0.1:20128/v1
┌─────────────────────────────────────────┐
│  9Router (di VPS lo, port 20128)        │
│  • RTK Token Saver                      │
│  • Format translation (OpenAI ↔ Claude) │
│  • Quota tracking + auto fallback       │
└────────┬────────────────────────────────┘
         ├─→ Tier 1 (SUBSCRIPTION)
         │     • Claude Code Pro/Max
         │     • OpenAI Codex Plus/Pro
         │     • GitHub Copilot
         ├─→ Tier 2 (CHEAP API key)
         │     • GLM ($0.6/1M tokens)
         │     • MiniMax ($0.2/1M tokens)
         │     • DeepSeek
         │     • OpenRouter
         └─→ Tier 3 (FREE)
               • Kiro AI (Claude 4.5 unlimited!)
               • OpenCode Free (no auth)
               • Vertex AI ($300 credit)

Install 9Router

Option A: npm global (paling gampang)

npm install -g 9router
9router

Default jalan di port 20128. Dashboard di http://localhost:20128.

Cocok untuk: testing cepat di laptop lo, atau VPS pribadi.

Option B: Docker

docker run -d \
  --name 9router \
  -p 20128:20128 \
  -v ~/9router-data:/app/data \
  --restart unless-stopped \
  decolua/9router:latest

Cocok untuk: production di VPS, isolate dari host.

Option C: Source code (kalo lo mau hack)

git clone https://github.com/decolua/9router.git
cd 9router
cp .env.example .env
nano .env   # set JWT_SECRET, INITIAL_PASSWORD, dll
npm install
npm run build
PORT=20128 HOSTNAME=0.0.0.0 NEXT_PUBLIC_BASE_URL=http://localhost:20128 npm run start

Cocok untuk: develop / customize 9router itu sendiri.

First-time setup

1. Buka dashboard

http://<vps-ip>:20128

Atau via SSH tunnel kalo VPS ga expose port public:

ssh -L 20128:localhost:20128 ubuntu@<vps-ip>
# Buka http://localhost:20128 di browser laptop lo

2. Login

Username: admin Password: dari INITIAL_PASSWORD di .env

Setelah login pertama, ganti password lewat dashboard → Settings → Account.

3. Generate API key

Dashboard → API Keys → Create new key.

Beri nama: kai-agent (atau apa aja deskriptif). Copy key, simpan di ~/agent/.env:

FREEMODEL_API_KEY=fe_oa_xxxxxxxxxxxxxxxxxxxx

4. Connect minimal 1 provider

Dashboard → Providers → Connect.

Recommended starter (no signup needed):

  • Kiro AI (free Claude unlimited) — login via AWS Builder ID / Google / GitHub
  • OpenCode Free (no auth, passthrough proxy)

Detail Kiro di halaman Kiro. Detail alternatif di halaman lainnya.

Integrate ke Kai

Update ~/ai-agent/.env (atau ~/agent/.env):

OPENAI_API_KEY=fe_oa_xxxxxxxxxxxxxxxxxxxx
OPENAI_BASE_URL=http://127.0.0.1:20128/v1
OPENAI_MODEL=kr/auto

kr/auto = auto-pick model. Atau pakai spesifik:

OPENAI_MODEL=kr/claude-sonnet-4.5

Restart bot:

sudo systemctl restart kai-bot

Test chat. Lo harusnya dapet response yang lebih cerdas (Claude Sonnet 4.5).

Naming convention model di 9Router

9Router pake prefix berdasarkan provider:

Prefix Provider Contoh model
kr/ Kiro AI kr/claude-sonnet-4.5, kr/glm-5, kr/auto
cc/ Claude Code cc/claude-opus-4-7, cc/claude-sonnet-4-6
cx/ Codex cx/gpt-5.5, cx/gpt-5.4
gh/ GitHub Copilot gh/gpt-5, gh/claude-sonnet-4
or/ OpenRouter or/anthropic/claude-3.5-sonnet, or/google/gemini-2.0
oc/ OpenCode Free oc/claude-3.5-sonnet, oc/gpt-4o
vx/ Vertex AI vx/gemini-3-pro, vx/claude-sonnet-4
glm/ GLM (Zhipu) glm/glm-5, glm/glm-4-plus
ds/ DeepSeek ds/deepseek-chat, ds/deepseek-coder

Special: kr/auto — auto pick best available model.

Quota tracking

Dashboard → Quota tab:

  • Subscription tier: shows quota Claude Code / Codex / Copilot (5-hour + weekly)
  • Cheap tier: shows credit balance per provider
  • Free tier: usage counter

Bot lo otomatis switch ke tier berikutnya kalo subscription quota habis. Zero downtime.

RTK Token Saver

Auto-aktif. Yang dia lakuin:

  • Detect tool_result content di request (output dari git diff, grep -r, ls -la, dll)
  • Kompres / truncate redundant info
  • Save 20-40% token per multi-step agent call

Buat agent kayak Kai yang banyak agentic loop, ini real saving.

Multi-account round-robin

Kalo lo punya 2+ akun Kiro (atau 2+ Claude Code Pro):

Dashboard → Providers → Kiro → Add Account.

9Router auto round-robin antara akun. Effective doubling free quota.

Setup systemd (jalan 24/7)

sudo tee /etc/systemd/system/9router.service > /dev/null << 'EOF'
[Unit]
Description=9Router LLM Gateway
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/9router
EnvironmentFile=/home/ubuntu/9router/.env
ExecStart=/usr/bin/npm run start
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable 9router
sudo systemctl start 9router
sudo systemctl status 9router

Verify integration

Test endpoint langsung:

curl -X POST http://127.0.0.1:20128/v1/chat/completions \
  -H "Authorization: Bearer fe_oa_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kr/auto",
    "messages": [{"role": "user", "content": "halo"}]
  }'

Expect respond dengan JSON {"choices": [...]}. Kalo error 401 → API key salah. Kalo error 502 → 9router belum running.

Anti-pattern

❌ Hardcode 9router URL di kode

client = OpenAI(base_url="http://127.0.0.1:20128/v1", api_key="fe_oa_xxx")

Hardcode = ga bisa switch ke OpenAI langsung kalo 9router down. Pakai env var:

client = OpenAI(
    base_url=os.environ.get("OPENAI_BASE_URL", "https://api.openai.com/v1"),
    api_key=os.environ["OPENAI_API_KEY"]
)

❌ Expose port 20128 ke public

# DON'T:
sudo ufw allow 20128

Bot lo connect via localhost. Public expose = orang lain bisa pake quota lo + akses dashboard.

Solusi: expose lewat Cloudflare Tunnel atau Tailscale kalo lo butuh akses remote.

❌ Run 9router as root

sudo 9router  # NO

Pake user biasa (ubuntu / agent). systemd User=ubuntu. Kalo error permission, fix folder ownership, bukan jalanin as root.

Pricing & limit (per Mei 2026)

Tier Cost Note
Kiro AI FREE Unlimited Claude Sonnet 4.5 + GLM-5 + MiniMax
OpenCode Free FREE No auth, models auto-fetched
Vertex AI FREE $300 credit untuk akun GCP baru
GLM $0.6 / 1M tokens Cheap, decent quality
MiniMax $0.2 / 1M tokens Cheapest cheap tier
OpenRouter varies Hub ke 100+ model, pay-per-use
Claude Code Pro $20/bln 5-hour quota Claude
Codex Plus $20/bln 5-hour quota GPT-5

Strategi optimal: connect Kiro (free) + 1 cheap provider (GLM/DeepSeek) sebagai fallback. Total cost untuk personal agent: $0-2/bulan.

Troubleshooting

Bot ga konek ke 9router

# Cek 9router running?
curl http://127.0.0.1:20128/v1/models -H "Authorization: Bearer $FREEMODEL_API_KEY"
# Should return JSON list of models

Kalo connection refused:

sudo systemctl status 9router
sudo journalctl -u 9router -n 50

Response lambat

# Cek tier mana yang dipake
# Dashboard → Logs → liat provider yang dipake

Kalo Kiro lambat (kadang queue), switch ke OpenCode Free sementara, atau bayar untuk Codex Plus / Claude Code Pro.

"All providers failed"

Berarti semua tier (subscription + cheap + free) udah quota habis atau down.

Fix: 1. Cek dashboard, refresh token Kiro 2. Add provider baru 3. Atau switch model: kr/autooc/claude-3.5-sonnet

Token tracking inaccurate

# Refresh quota di dashboard
# Atau restart 9router:
sudo systemctl restart 9router

Update 9router

# npm version
npm update -g 9router

# Docker version
docker pull decolua/9router:latest
docker stop 9router && docker rm 9router
# rerun docker run command

# Source version
cd ~/9router
git pull
npm install
npm run build
sudo systemctl restart 9router

Resources

  • Repo: https://github.com/decolua/9router
  • Website: https://9router.com
  • Docs: https://9router.com/docs

Next step