🌐 Languages: 🇺🇸 English | 🇧🇷 Português (Brasil) | 🇪🇸 Español | 🇫🇷 Français | 🇮🇹 Italiano | 🇷🇺 Русский | 🇨🇳 中文 (简体) | 🇩🇪 Deutsch | 🇮🇳 हिन्दी | 🇹🇭 ไทย | 🇺🇦 Українська | 🇸🇦 العربية | 🇯🇵 日本語 | 🇻🇳 Tiếng Việt | 🇧🇬 Български | 🇩🇰 Dansk | 🇫🇮 Suomi | 🇮🇱 עברית | 🇭🇺 Magyar | 🇮🇩 Bahasa Indonesia | 🇰🇷 한국어 | 🇲🇾 Bahasa Melayu | 🇳🇱 Nederlands | 🇳🇴 Norsk | 🇵🇹 Português (Portugal) | 🇷🇴 Română | 🇵🇱 Polski | 🇸🇰 Slovenčina | 🇸🇪 Svenska | 🇵🇭 Filipino
Problemi comuni e soluzioni per OmniRoute.
| Problema | Soluzione |
|---|---|
| Primo accesso non funzionante | Seleziona INITIAL_PASSWORD in .env (predefinito: 123456) |
| Il dashboard si apre sulla porta sbagliata | Imposta PORT=20128 e NEXT_PUBLIC_BASE_URL=http://localhost:20128 |
Nessun registro delle richieste in logs/ |
Imposta ENABLE_REQUEST_LOGS=true |
| EACCES: permesso negato | Imposta DATA_DIR=/path/to/writable/dir per sovrascrivere ~/.omniroute |
| La strategia di routing non viene salvata | Aggiornamento alla v1.4.11+ (correzione dello schema Zod per la persistenza delle impostazioni) |
Causa: Quota del fornitore esaurita.
Aggiustare:
- Controlla il monitoraggio delle quote del dashboard
- Utilizza una combinazione con livelli di fallback
- Passa al livello più economico/gratuito
Causa: Quota di abbonamento esaurita.
Aggiustare:
- Aggiungi riserva:
cc/claude-opus-4-6 → glm/glm-4.7 → if/kimi-k2-thinking - Utilizza GLM/MiniMax come backup economico
OmniRoute aggiorna automaticamente i token. Se i problemi persistono:
- Dashboard → Fornitore → Riconnetti
- Elimina e aggiungi nuovamente la connessione del provider
- Verifica che
BASE_URLpunti all'istanza in esecuzione (ad esempio,http://localhost:20128) - Verifica che
CLOUD_URLpunti al tuo endpoint cloud (ad esempio,https://omniroute.dev) - Mantieni i valori
NEXT_PUBLIC_*allineati con i valori lato server
Sintomo: Unexpected token 'd'... sull'endpoint cloud per chiamate non in streaming.
Causa: l'upstream restituisce il payload SSE mentre il client si aspetta JSON.
Soluzione alternativa: utilizzare stream=true per le chiamate dirette sul cloud. Il runtime locale include il fallback SSE→JSON.
- Crea una nuova chiave dal dashboard locale (
/api/keys) - Eseguire la sincronizzazione cloud: Abilita Cloud → Sincronizza ora
- Le chiavi vecchie/non sincronizzate possono ancora restituire
401sul cloud
- Controlla i campi di runtime:
curl http://localhost:20128/api/cli-tools/runtime/codex | jq - Per la modalità portatile: utilizzare la destinazione dell'immagine
runner-cli(CLI in bundle) - Per la modalità di montaggio host: impostare
CLI_EXTRA_PATHSe montare la directory bin dell'host come di sola lettura - Se
installed=trueerunnable=false: il binario è stato trovato ma il controllo dello stato non è riuscito
curl -s http://localhost:20128/api/cli-tools/codex-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/claude-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'
curl -s http://localhost:20128/api/cli-tools/openclaw-settings | jq '{installed,runnable,commandPath,runtimeMode,reason}'- Controlla le statistiche di utilizzo in Dashboard → Utilizzo
- Passare dal modello principale a GLM/MiniMax
- Utilizza il livello gratuito (Gemini CLI, iFlow) per attività non critiche
- Imposta i budget dei costi per chiave API: Dashboard → Chiavi API → Budget
Imposta ENABLE_REQUEST_LOGS=true nel tuo file .env. I registri vengono visualizzati nella directory logs/.
# Health dashboard
http://localhost:20128/dashboard/health
# API health check
curl http://localhost:20128/api/monitoring/health- Stato principale:
${DATA_DIR}/db.json(provider, combo, alias, chiavi, impostazioni) - Utilizzo:
${DATA_DIR}/usage.json,${DATA_DIR}/log.txt,${DATA_DIR}/call_logs/ - Registri delle richieste:
<repo>/logs/...(quandoENABLE_REQUEST_LOGS=true)
Quando l'interruttore di un provider è APERTO, le richieste vengono bloccate fino alla scadenza del tempo di recupero.
Aggiustare:
- Vai su Dashboard → Impostazioni → Resilienza
- Controllare la scheda dell'interruttore del provider interessato
- Fare clic su Reimposta tutto per cancellare tutti gli interruttori o attendere la scadenza del tempo di recupero
- Verificare che il provider sia effettivamente disponibile prima di reimpostare
Se un provider entra ripetutamente nello stato OPEN:
- Selezionare Dashboard → Salute → Salute del provider per il modello di errore
- Vai su Impostazioni → Resilienza → Profili fornitore e aumenta la soglia di errore
- Controlla se il provider ha modificato i limiti API o richiede la riautenticazione
- Esaminare la telemetria della latenza: un'elevata latenza può causare errori basati sul timeout
- Assicurati di utilizzare il prefisso corretto:
deepgram/nova-3oassemblyai/best - Verificare che il provider sia connesso in Dashboard → Provider
- Controlla i formati audio supportati:
mp3,wav,m4a,flac,ogg,webm - Verificare che la dimensione del file rientri nei limiti del provider (in genere < 25 MB)
- Controlla la validità della chiave API del fornitore nella scheda del fornitore
Utilizza Dashboard → Traduttore per eseguire il debug dei problemi di traduzione del formato:
| Modalità | Quando usarlo |
|---|---|
| Parco giochi | Confronta i formati di input/output fianco a fianco: incolla una richiesta non riuscita per vedere come viene tradotta |
| Tester della chat | Invia messaggi in tempo reale e controlla l'intero payload di richiesta/risposta, comprese le intestazioni |
| Banco di prova | Esegui test batch su combinazioni di formati per scoprire quali traduzioni sono interrotte |
| Monitoraggio dal vivo | Guarda il flusso di richieste in tempo reale per individuare problemi di traduzione intermittenti |
- I tag Thinking non vengono visualizzati: controlla se il fornitore di destinazione supporta il pensiero e l'impostazione del budget per il pensiero
- Chiamate dello strumento eliminate: alcune traduzioni di formato potrebbero eliminare i campi non supportati; verificare in modalità Parco giochi
- Prompt di sistema mancante — Claude e Gemini gestiscono i prompt di sistema in modo diverso; controllare l'output della traduzione
- L'SDK restituisce una stringa non elaborata anziché un oggetto — Risolto nella versione 1.1.0: il sanitizer della risposta ora rimuove i campi non standard (
x_groq,usage_breakdowne così via) che causano errori di convalida OpenAI SDK Pydantic - GLM/ERNIE rifiuta il ruolo
system— Risolto nella versione 1.1.0: il normalizzatore del ruolo unisce automaticamente i messaggi di sistema nei messaggi utente per modelli incompatibili - Ruolo
developernon riconosciuto — Risolto il problema nella v1.1.0: convertito automaticamente insystemper provider non OpenAI json_schemanon funziona con Gemini — Risolto il problema nella v1.1.0:response_formatè ora convertito inresponseMimeTypedi Gemini +responseSchema
- Il limite di velocità automatico si applica solo ai fornitori di chiavi API (non OAuth/abbonamento)
- Verificare che Impostazioni → Resilienza → Profili fornitore abbia il limite di velocità automatico abilitato
- Controlla se il provider restituisce codici di stato
429o intestazioniRetry-After
I profili dei fornitori supportano queste impostazioni:
- Ritardo base: tempo di attesa iniziale dopo il primo errore (impostazione predefinita: 1 s)
- Ritardo massimo: limite massimo del tempo di attesa (impostazione predefinita: 30 secondi)
- Moltiplicatore: quanto aumentare il ritardo per guasto consecutivo (impostazione predefinita: 2x)
Quando molte richieste simultanee raggiungono un provider con velocità limitata, OmniRoute utilizza mutex + limitazione automatica della velocità per serializzare le richieste e prevenire errori a catena. Questo è automatico per i fornitori di chiavi API.
- Problemi GitHub: github.com/diegosouzapw/OmniRoute/issues
- Architettura: vedi link per i dettagli interni
- Riferimento API: vedere link per tutti gli endpoint
- Dashboard salute: controlla Dashboard → Salute per lo stato del sistema in tempo reale
- Traduttore: utilizza Dashboard → Traduttore per eseguire il debug dei problemi di formato