351 lines
6.5 KiB
Markdown
351 lines
6.5 KiB
Markdown
# Troubleshooting
|
|
|
|
Common issues and solutions when using 9Router.
|
|
|
|
---
|
|
|
|
## "Language model did not provide messages"
|
|
|
|
**Problem:** Request fails with empty response or error message.
|
|
|
|
**Causes:**
|
|
- Provider quota exhausted
|
|
- API key invalid or expired
|
|
- Model not available
|
|
|
|
**Solutions:**
|
|
|
|
1. **Check quota status:**
|
|
```
|
|
Dashboard → Providers → View quota tracker
|
|
```
|
|
If quota is exhausted, wait for reset or switch provider.
|
|
|
|
2. **Use combo fallback:**
|
|
```
|
|
Dashboard → Combos → Create fallback chain
|
|
Example: cc/claude-opus → glm/glm-4.7 → if/kimi-k2
|
|
```
|
|
|
|
3. **Verify provider connection:**
|
|
```
|
|
Dashboard → Providers → Reconnect if needed
|
|
```
|
|
|
|
---
|
|
|
|
## Rate Limiting
|
|
|
|
**Problem:** "Rate limit exceeded" or "Too many requests" errors.
|
|
|
|
**Causes:**
|
|
- Subscription quota depleted (5-hour/daily/weekly limits)
|
|
- API rate limits hit
|
|
- Too many concurrent requests
|
|
|
|
**Solutions:**
|
|
|
|
1. **Check reset time:**
|
|
```
|
|
Dashboard → Quota Tracking → View reset countdown
|
|
```
|
|
|
|
2. **Switch to cheap tier:**
|
|
```
|
|
Use: glm/glm-4.7 ($0.6/1M tokens)
|
|
minimax/MiniMax-M2.1 ($0.20/1M tokens)
|
|
```
|
|
|
|
3. **Add fallback combo:**
|
|
```
|
|
Dashboard → Combos → Add backup models
|
|
Primary: cc/claude-opus (subscription)
|
|
Backup: glm/glm-4.7 (cheap)
|
|
Emergency: if/kimi-k2 (free)
|
|
```
|
|
|
|
---
|
|
|
|
## OAuth Token Expired
|
|
|
|
**Problem:** "Unauthorized" or "Token expired" errors.
|
|
|
|
**Causes:**
|
|
- OAuth token expired (auto-refresh failed)
|
|
- Provider session invalidated
|
|
- Network issues during refresh
|
|
|
|
**Solutions:**
|
|
|
|
1. **Auto-refresh (default):**
|
|
9Router automatically refreshes tokens. Wait 30 seconds and retry.
|
|
|
|
2. **Manual reconnect:**
|
|
```
|
|
Dashboard → Providers → [Provider Name] → Reconnect
|
|
→ Complete OAuth flow again
|
|
```
|
|
|
|
3. **Check provider status:**
|
|
Verify provider service is online (Claude Code, Codex, etc.)
|
|
|
|
---
|
|
|
|
## High Costs
|
|
|
|
**Problem:** Unexpected high usage or costs.
|
|
|
|
**Causes:**
|
|
- Using expensive models unnecessarily
|
|
- No fallback to cheaper tiers
|
|
- Large context windows
|
|
|
|
**Solutions:**
|
|
|
|
1. **Check usage stats:**
|
|
```
|
|
Dashboard → Usage Stats → View token consumption
|
|
→ Identify high-cost models
|
|
```
|
|
|
|
2. **Switch to cheaper models:**
|
|
```
|
|
Replace: cc/claude-opus ($20-100/month subscription)
|
|
With: glm/glm-4.7 ($0.6/1M tokens)
|
|
minimax/MiniMax-M2.1 ($0.20/1M tokens)
|
|
```
|
|
|
|
3. **Use free tier:**
|
|
```
|
|
if/kimi-k2-thinking (FREE)
|
|
qw/qwen3-coder-plus (FREE)
|
|
kr/claude-sonnet-4.5 (FREE)
|
|
gc/gemini-3-flash-preview (FREE 180K/month)
|
|
```
|
|
|
|
4. **Optimize prompts:**
|
|
- Reduce context size
|
|
- Use streaming for long responses
|
|
- Cache common prompts
|
|
|
|
---
|
|
|
|
## Connection Refused
|
|
|
|
**Problem:** "ECONNREFUSED" or "Cannot connect to localhost:20128".
|
|
|
|
**Causes:**
|
|
- 9Router not running
|
|
- Port 20128 blocked
|
|
- Firewall blocking connection
|
|
|
|
**Solutions:**
|
|
|
|
1. **Start 9Router:**
|
|
```bash
|
|
9router
|
|
```
|
|
Dashboard should open at http://localhost:3000
|
|
|
|
2. **Verify port 20128:**
|
|
```bash
|
|
# Check if port is listening
|
|
lsof -i :20128
|
|
|
|
# Or on Windows
|
|
netstat -ano | findstr :20128
|
|
```
|
|
|
|
3. **Check firewall:**
|
|
- macOS: System Settings → Network → Firewall
|
|
- Windows: Windows Defender Firewall → Allow app
|
|
- Linux: `sudo ufw allow 20128`
|
|
|
|
4. **Use cloud endpoint:**
|
|
If localhost doesn't work (e.g., Cursor IDE):
|
|
```
|
|
Endpoint: https://9router.com/v1
|
|
```
|
|
|
|
---
|
|
|
|
## Dashboard Not Opening
|
|
|
|
**Problem:** Dashboard doesn't load at http://localhost:3000.
|
|
|
|
**Causes:**
|
|
- Port 3000 already in use
|
|
- 9Router crashed
|
|
- Browser cache issues
|
|
|
|
**Solutions:**
|
|
|
|
1. **Check if 9Router is running:**
|
|
```bash
|
|
# Check process
|
|
ps aux | grep 9router
|
|
|
|
# Check port 3000
|
|
lsof -i :3000
|
|
```
|
|
|
|
2. **Kill conflicting process:**
|
|
```bash
|
|
# macOS/Linux
|
|
lsof -ti:3000 | xargs kill -9
|
|
|
|
# Windows
|
|
netstat -ano | findstr :3000
|
|
taskkill /PID <PID> /F
|
|
```
|
|
|
|
3. **Restart 9Router:**
|
|
```bash
|
|
# Stop
|
|
pkill -f 9router
|
|
|
|
# Start
|
|
9router
|
|
```
|
|
|
|
4. **Clear browser cache:**
|
|
- Chrome: Ctrl+Shift+Delete → Clear cache
|
|
- Try incognito mode
|
|
|
|
5. **Check firewall settings:**
|
|
Ensure port 3000 is not blocked.
|
|
|
|
---
|
|
|
|
## Model Not Found
|
|
|
|
**Problem:** "Model not found" or "Invalid model" errors.
|
|
|
|
**Causes:**
|
|
- Provider not connected
|
|
- Model ID typo
|
|
- Provider inactive
|
|
|
|
**Solutions:**
|
|
|
|
1. **Verify provider connection:**
|
|
```
|
|
Dashboard → Providers → Check status (green = active)
|
|
```
|
|
|
|
2. **Check model ID format:**
|
|
```
|
|
Correct: cc/claude-opus-4-5-20251101
|
|
Wrong: claude-opus-4-5-20251101
|
|
|
|
Format: [provider-prefix]/[model-name]
|
|
```
|
|
|
|
3. **List available models:**
|
|
```bash
|
|
curl http://localhost:20128/v1/models \
|
|
-H "Authorization: Bearer your-api-key"
|
|
```
|
|
|
|
4. **Reconnect provider:**
|
|
```
|
|
Dashboard → Providers → [Provider] → Reconnect
|
|
```
|
|
|
|
---
|
|
|
|
## Slow Response
|
|
|
|
**Problem:** Requests take too long or timeout.
|
|
|
|
**Causes:**
|
|
- Provider latency
|
|
- Network issues
|
|
- Large context/response
|
|
- Provider rate limiting
|
|
|
|
**Solutions:**
|
|
|
|
1. **Check provider status:**
|
|
```
|
|
Dashboard → Providers → View latency stats
|
|
```
|
|
|
|
2. **Switch to faster model:**
|
|
```
|
|
Fast: cc/claude-haiku-4-5 (Haiku is faster than Opus)
|
|
gc/gemini-3-flash-preview
|
|
qw/qwen3-coder-flash
|
|
```
|
|
|
|
3. **Use streaming:**
|
|
```json
|
|
{
|
|
"model": "cc/claude-opus-4-5",
|
|
"messages": [...],
|
|
"stream": true
|
|
}
|
|
```
|
|
|
|
4. **Check network:**
|
|
```bash
|
|
# Test latency
|
|
ping api.anthropic.com
|
|
ping api.openai.com
|
|
```
|
|
|
|
5. **Reduce context size:**
|
|
- Trim message history
|
|
- Use smaller prompts
|
|
- Enable context pruning in CLI tool
|
|
|
|
---
|
|
|
|
## API Key Invalid
|
|
|
|
**Problem:** "Invalid API key" or "Authentication failed" errors.
|
|
|
|
**Causes:**
|
|
- Wrong API key copied
|
|
- API key expired
|
|
- API key not generated
|
|
|
|
**Solutions:**
|
|
|
|
1. **Regenerate API key:**
|
|
```
|
|
Dashboard → Settings → API Keys → Generate New Key
|
|
→ Copy and use new key
|
|
```
|
|
|
|
2. **Verify key format:**
|
|
```
|
|
Correct: 9r_xxxxxxxxxxxxxxxxxxxxxxxx
|
|
Wrong: Missing 9r_ prefix
|
|
```
|
|
|
|
3. **Check key in CLI config:**
|
|
```bash
|
|
# Cursor
|
|
Settings → Models → OpenAI API Key
|
|
|
|
# Cline
|
|
Settings → API Key
|
|
|
|
# Environment variable
|
|
export OPENAI_API_KEY="9r_your_key"
|
|
```
|
|
|
|
4. **Test API key:**
|
|
```bash
|
|
curl http://localhost:20128/v1/models \
|
|
-H "Authorization: Bearer 9r_your_key"
|
|
```
|
|
|
|
---
|
|
|
|
## Need More Help?
|
|
|
|
- **GitHub Issues:** [github.com/decolua/9router/issues](https://github.com/decolua/9router/issues)
|
|
- **Documentation:** [9router.com/docs](https://9router.com/docs)
|
|
- **FAQ:** [faq.md](faq.md)
|