Observed since 20 Oct, 21:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
9router-check
Unofficial CLI tool for checking 9Router model availability
Unofficial CLI tool untuk mengecek ketersediaan dan kesehatan model AI pada server 9Router.
9Router Check adalah tool command-line yang membantu Anda memantau ketersediaan dan kesehatan model AI melalui server 9Router. Tool ini terhubung ke instance 9Router Anda, menemukan semua model yang tersedia, dan menguji masing-masing model untuk memberikan informasi status secara real-time.
| Komponen | Versi Minimum |
|---|---|
| Node.js | >= 18.0.0 |
| npm | >= 9.0.0 |
| Server 9Router | Berjalan dan dapat diakses |
npm install -g 9router-check
Setelah install, Anda bisa langsung menjalankan dari terminal mana saja:
9router-check
npx 9router-check
# Clone repository
git clone https://github.com/Adiwijaya11/9router-check-model.git
cd 9router-check-model
# Install dependencies
npm install
# Build project
npm run build
# Jalankan
npm start
| Variable | Wajib | Default | Keterangan |
|---|---|---|---|
NINE_ROUTER_BASE_URL | Tidak | http://localhost:20128/v1 | Base URL API 9Router |
NINE_ROUTER_API_KEY | Ya | — | API key 9Router Anda |
Opsi 1: File .env
Buat file .env di root project:
NINE_ROUTER_BASE_URL=http://localhost:20128/v1
NINE_ROUTER_API_KEY=your-api-key-here
Opsi 2: Environment Variable di Terminal
Linux / macOS:
export NINE_ROUTER_BASE_URL=http://localhost:20128/v1
export NINE_ROUTER_API_KEY=your-api-key-here
Windows (PowerShell):
$env:NINE_ROUTER_BASE_URL="http://localhost:20128/v1"
$env:NINE_ROUTER_API_KEY="your-api-key-here"
Opsi 3: Prompt Interaktif
Jika NINE_ROUTER_API_KEY tidak diset, tool akan meminta Anda memasukkan API key saat dijalankan.
# Pengecekan dasar
9router-check
# Dengan concurrency 5
9router-check --concurrency 5
# Output sebagai JSON
9router-check --json
# Output sebagai CSV
9router-check --csv
# Filter berdasarkan provider
9router-check --provider cc
# Kombinasi opsi
9router-check --concurrency 5 --json --provider cc
| Opsi | Short | Default | Keterangan |
|---|---|---|---|
--help | -h | — | Tampilkan pesan bantuan |
--version | -v | — | Tampilkan versi |
--base-url <url> | -b | http://localhost:20128/v1 | Base URL 9Router |
--concurrency <n> | -c | 3 | Maksimal request bersamaan |
--provider <name> | -p | — | Filter berdasarkan provider |
--json | — | false | Output sebagai JSON |
--csv | — | false | Output sebagai CSV |
$ 9router-check
╔══════════════════════════════════════════════════════════╗
║ 9Router Model Checker v0.1.0 ║
╚══════════════════════════════════════════════════════════╝
Base URL: http://localhost:20128/v1
API Key: ***abcd
Fetching models...
Cek model dari provider: cc (5 model)
✓ claude-opus-4-5-20251101 HIDUP 1.21s
✓ claude-sonnet-4-20250514 HIDUP 0.95s
✗ claude-haiku-4-20251001 MATI 0.50s
Cek model dari provider: gemini (3 model)
✓ gemini-pro HIDUP 0.80s
⚠ gemini-flash LIMIT 2.10s
──────────────────────────────────────────────────
Total Model : 8
Hidup : 3
Mati : 1
Limit : 1
Timeout : 0
Auth Error : 0
Provider Error: 0
Invalid : 0
Unknown : 0
──────────────────────────────────────────────────
$ 9router-check --json
{
"summary": {
"total": 8,
"active": 3,
"unavailable": 1,
"rateLimited": 1,
"timeout": 0,
"authError": 0,
"providerError": 0,
"invalidResponse": 0,
"unknownError": 0
},
"providers": [
{
"name": "cc",
"models": [
{
"id": "claude-opus-4-5-20251101",
"status": "ACTIVE",
"latencyMs": 1210
}
]
}
]
}
$ 9router-check --csv
provider,model,status,latencyMs,error
cc,claude-opus-4-5-20251101,ACTIVE,1210,
cc,claude-sonnet-4-20250514,ACTIVE,950,
cc,claude-haiku-4-20251001,UNAVAILABLE,500,Model not found
Menampilkan hasil pengecekan secara visual dengan warna:
Output terstruktur yang cocok untuk:
Output tabular yang cocok untuk:
| Status | Simbol | Keterangan |
|---|---|---|
ACTIVE | ✓ | Model berfungsi normal dan dapat digunakan |
UNAVAILABLE | ✗ | Model tidak ditemukan atau tidak tersedia |
RATE_LIMITED | ⚠ | Rate limit exceeded (429) — terlalu banyak request |
AUTH_ERROR | ✗ | Authentication gagal (401/403) — API key salah/expired |
PROVIDER_ERROR | ✗ | Provider server error (5xx) — masalah di sisi provider |
TIMEOUT | ⚠ | Request timeout — model terlalu lambat merespons |
INVALID_RESPONSE | ✗ | Response tidak valid — format response salah |
UNKNOWN_ERROR | ? | Error tidak dikenali — perlu investigasi lebih lanjut |
9router-check-model/
│
├── src/
│ ├── index.ts # CLI entry point
│ ├── config/
│ │ └── config.ts # Configuration management
│ ├── router/
│ │ ├── client.ts # 9Router API client
│ │ └── models.ts # Model discovery
│ ├── tester/
│ │ ├── model-tester.ts # Model health checker
│ │ ├── concurrency.ts # Concurrency controller
│ │ └── retry.ts # Retry logic
│ ├── classifier/
│ │ └── error-classifier.ts # Error classification
│ ├── output/
│ │ ├── terminal.ts # Terminal output
│ │ ├── json.ts # JSON output
│ │ └── csv.ts # CSV output
│ └── types/
│ └── index.ts # Type definitions
│
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
└── README.md
git clone https://github.com/Adiwijaya11/9router-check-model.git
cd 9router-check-model
npm install
| Perintah | Keterangan |
|---|---|
npm run dev | Jalankan dalam mode development dengan ts-node |
npm run build | Compile TypeScript ke JavaScript |
npm start | Jalankan hasil compile |
npm test | Jalankan semua test |
npm test
Test terletak di samping file source dengan ekstensi .test.ts.
Penyebab: API key tidak diset atau tidak valid.
Solusi:
export NINE_ROUTER_API_KEY=your-api-key-here
Penyebab: Server 9Router tidak berjalan atau Base URL salah.
Solusi:
curl http://localhost:20128/v1/modelsPenyebab: API key salah atau expired.
Solusi:
Penyebab: Server 9Router lambat atau concurrency terlalu tinggi.
Solusi:
# Kurangi concurrency
9router-check --concurrency 1
ISC License — lihat file LICENSE untuk detail lengkap.
⚠️ Ini adalah tool unofficial dan tidak berafiliasi dengan atau didukung oleh 9Router. Gunakan dengan risiko Anda sendiri.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
ts-nodeEnvironment{
"local_name": "ts-node",
"alias": false,
"peer_metadata": null
} | ^10.9.2 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ^5.6.0 | development |
@types/nodeEnvironment{
"local_name": "@types/node",
"alias": false,
"peer_metadata": null
} | ^22.0.0 | development |
Source distribution
{
"shasum": "7f1e58c905a1a34dfcf606904067d9efd0e20276",
"tarball": "https://registry.npmjs.org/9router-check/-/9router-check-0.1.8.tgz",
"fileCount": 95,
"integrity": "sha512-TqG4ckfj3EQDOZIKh8LaoRToon150CauxO+dl/DyMFYbapcpP1U4AaS7STWEjvyJZTZQY/6y/9Jpq6XkgiPD2g==",
"signatures": [
{
"sig": "MEQCIGW2/WTwbzpaIKenzJcqxrRzU60LtvYNjZ/05mq46Qa8AiAuh4zEvR2suzjEqdFVhOsPSWt2/6Fukf999YLDrNZfbA==",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
},
{
"sig": "MEUCIQDgm1Xd/85JGha5rkl8n8ozW6IAgNoTv5wQRruw62wqogIgYie/2oYZ8QlPxR/wNgJHDNPB3QxqbeXonOXLXYJ5p/A=",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
}
],
"unpackedSize": 178828
}Observed since 20 Oct, 21:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:a52a3cd7a2e4d5eee607b141d00d96a81adfced7153ee0ccd5925cc6fd222937