Model yedekleme
OpenClaw hataları iki aşamada ele alır:- Geçerli sağlayıcı içinde auth profili döndürme.
agents.defaults.model.fallbacksiçindeki bir sonraki modele model yedekleme.
Çalışma zamanı akışı
Normal bir metin çalıştırması için OpenClaw adayları şu sırayla değerlendirir:- O anda seçili oturum modeli.
- Sıralı şekilde yapılandırılmış
agents.defaults.model.fallbacks. - Çalıştırma bir geçersiz kılma ile başladıysa sonda yapılandırılmış birincil model.
- Etkin oturum modelini ve auth profili tercihini çözümle.
- Model aday zincirini oluştur.
- Auth profili döndürme/cooldown kurallarıyla geçerli sağlayıcıyı dene.
- Bu sağlayıcı yedeklemeye uygun bir hatayla tükenirse, bir sonraki model adayına geç.
- Yeniden deneme başlamadan önce seçilen yedek geçersiz kılmayı kalıcı hale getir ki diğer oturum okuyucuları çalıştırıcının kullanmak üzere olduğu aynı sağlayıcıyı/modeli görsün.
- Yedek aday başarısız olursa, yalnızca yedek adaya ait oturum geçersiz kılma alanlarını, hâlâ o başarısız adayla eşleşiyorlarsa geri al.
- Her aday başarısız olursa, deneme başına ayrıntı ve biliniyorsa
en yakın cooldown bitiş zamanı ile bir
FallbackSummaryErrorfırlat.
providerOverridemodelOverrideauthProfileOverrideauthProfileOverrideSourceauthProfileOverrideCompactionCount
/model değişiklikleri veya oturum döndürme güncellemeleri gibi daha yeni,
ilgisiz oturum mutasyonlarının üzerine yazmasını engeller.
Auth depolama (anahtarlar + OAuth)
OpenClaw hem API anahtarları hem de OAuth belirteçleri için auth profilleri kullanır.- Gizli bilgiler
~/.openclaw/agents/<agentId>/agent/auth-profiles.jsoniçinde bulunur (eski:~/.openclaw/agent/auth-profiles.json). - Çalışma zamanı auth yönlendirme durumu
~/.openclaw/agents/<agentId>/agent/auth-state.jsoniçinde bulunur. auth.profiles/auth.orderyapılandırması yalnızca üst veri + yönlendirme içindir (gizli bilgi içermez).- Eski yalnızca içe aktarma amaçlı OAuth dosyası:
~/.openclaw/credentials/oauth.json(ilk kullanımdaauth-profiles.jsoniçine aktarılır).
type: "api_key"→{ provider, key }type: "oauth"→{ provider, access, refresh, expires, email? }(bazı sağlayıcılar içinprojectId/enterpriseUrlile birlikte)
Profil kimlikleri
OAuth oturum açmaları, birden fazla hesabın birlikte var olabilmesi için ayrı profiller oluşturur.- Varsayılan: e-posta yoksa
provider:default. - E-posta ile OAuth:
provider:<email>(örneğingoogle-antigravity:user@gmail.com).
profiles altında ~/.openclaw/agents/<agentId>/agent/auth-profiles.json içinde bulunur.
Döndürme sırası
Bir sağlayıcının birden fazla profili olduğunda OpenClaw şu şekilde bir sıra seçer:- Açık yapılandırma:
auth.order[provider](ayarlanmışsa). - Yapılandırılmış profiller: sağlayıcıya göre filtrelenmiş
auth.profiles. - Depolanmış profiller: sağlayıcı için
auth-profiles.jsoniçindeki girdiler.
- Birincil anahtar: profil türü (API anahtarlarından önce OAuth).
- İkincil anahtar:
usageStats.lastUsed(her tür içinde en eski önce). - Cooldown/devre dışı profiller en sona taşınır ve en yakın bitiş süresine göre sıralanır.
Oturum sabitleme (önbellek dostu)
OpenClaw, sağlayıcı önbelleklerini sıcak tutmak için seçilen auth profilini oturum başına sabitler. Her istekte döndürme yapmaz. Sabitlenen profil şu durumlara kadar yeniden kullanılır:- oturum sıfırlanırsa (
/new//reset) - bir sıkıştırma tamamlanırsa (sıkıştırma sayısı artar)
- profil cooldown durumundaysa/devre dışıysa
/model …@<profileId> ile manuel seçim, o oturum için bir kullanıcı geçersiz kılması
ayarlar ve yeni bir oturum başlayana kadar otomatik olarak döndürülmez.
Otomatik olarak sabitlenen profiller (oturum yönlendiricisi tarafından seçilenler) bir tercih
olarak değerlendirilir: önce onlar denenir, ancak OpenClaw hız sınırlarında/zaman aşımlarında başka bir profile dönebilir.
Kullanıcı tarafından sabitlenen profiller o profile kilitli kalır; başarısız olursa ve model yedeklemeleri
yapılandırılmışsa, OpenClaw profil değiştirmek yerine bir sonraki modele geçer.
OAuth neden “kaybolmuş” gibi görünebilir
Aynı sağlayıcı için hem bir OAuth profiliniz hem de bir API anahtarı profiliniz varsa, round-robin sabitlenmediği sürece mesajlar arasında bunlar arasında geçiş yapabilir. Tek bir profili zorlamak için:auth.order[provider] = ["provider:profileId"]ile sabitleyin veya- UI/chat yüzeyiniz destekliyorsa profil geçersiz kılması içeren
/model …ile oturum başına bir geçersiz kılma kullanın.
Cooldown süreleri
Bir profil auth/hız sınırı hataları nedeniyle başarısız olduğunda (veya hız sınırlaması gibi görünen bir zaman aşımında), OpenClaw onu cooldown durumuna işaretler ve bir sonraki profile geçer. Bu hız sınırı kovası yalnızca429 ile sınırlı değildir: sağlayıcı
mesajlarını da içerir; örneğin Too many concurrent requests, ThrottlingException,
concurrency limit reached, workers_ai ... quota limit exceeded,
throttled, resource exhausted ve weekly/monthly limit reached
gibi dönemsel kullanım penceresi sınırları.
Biçim/geçersiz istek hataları (örneğin Cloud Code Assist tool call ID
doğrulama hataları) yedeklemeye uygun kabul edilir ve aynı cooldown sürelerini kullanır.
Unhandled stop reason: error,
stop reason: error ve reason: error gibi OpenAI uyumlu durdurma nedeni hataları, zaman aşımı/yedekleme
sinyalleri olarak sınıflandırılır.
Sağlayıcı kapsamlı genel sunucu metinleri de, kaynak bilinen geçici bir desenle eşleştiğinde,
bu zaman aşımı kovasına girebilir. Örneğin Anthropic için yalın
An unknown error occurred ve internal server error, unknown error, 520, upstream error
veya backend error gibi geçici sunucu metinleri içeren JSON api_error
yükleri, yedeklemeye uygun zaman aşımı olarak değerlendirilir. OpenRouter’a özgü
yalın Provider returned error gibi genel upstream metinleri de yalnızca
sağlayıcı bağlamı gerçekten OpenRouter olduğunda zaman aşımı olarak değerlendirilir. LLM request failed with an unknown error. gibi
genel dahili yedek metinler temkinli kalır ve tek başına yedeklemeyi tetiklemez.
Hız sınırı cooldown süreleri model kapsamlı da olabilir:
- OpenClaw, başarısız model kimliği biliniyorsa hız sınırı hataları için
cooldownModelkaydeder. - Aynı sağlayıcıdaki kardeş bir model, cooldown farklı bir modele kapsamlanmışsa yine de denenebilir.
- Faturalama/devre dışı pencereleri ise modeller arasında tüm profili engellemeye devam eder.
- 1 dakika
- 5 dakika
- 25 dakika
- 1 saat (üst sınır)
usageStats altında auth-state.json içinde saklanır:
Faturalama nedeniyle devre dışı bırakmalar
Faturalama/kredi hataları (örneğin “insufficient credits” / “credit balance too low”) yedeklemeye uygun kabul edilir, ancak genellikle geçici değildir. Kısa bir cooldown yerine OpenClaw, profili devre dışı olarak işaretler (daha uzun bir geri çekilme ile) ve bir sonraki profile/sağlayıcıya döner. Her faturalama benzeri yanıt402 değildir ve her HTTP 402 de buraya düşmez.
OpenClaw, bir sağlayıcı bunun yerine 401 veya 403 döndürse bile açık
faturalama metnini faturalama yolunda tutar, ancak sağlayıcıya özgü eşleştiriciler
onlara sahip olan sağlayıcıyla sınırlı kalır (örneğin OpenRouter 403 Key limit exceeded). Buna karşılık geçici 402 kullanım penceresi ve
kuruluş/çalışma alanı harcama sınırı hataları, ileti yeniden denenebilir göründüğünde rate_limit olarak sınıflandırılır
(örneğin weekly usage limit exhausted, daily limit reached, resets tomorrow veya organization spending limit exceeded).
Bunlar uzun
faturalama-devre dışı bırakma yolu yerine kısa cooldown/yedekleme yolunda kalır.
Durum auth-state.json içinde saklanır:
- Faturalama geri çekilmesi 5 saatten başlar, her faturalama hatasında iki katına çıkar ve 24 saatte sınırlanır.
- Geri çekilme sayaçları, profil 24 saat boyunca başarısız olmamışsa sıfırlanır (yapılandırılabilir).
- Aşırı yük yeniden denemeleri, model yedeklemeden önce aynı sağlayıcı içinde 1 auth profili döndürmeye izin verir.
- Aşırı yük yeniden denemeleri varsayılan olarak 0 ms geri çekilme kullanır.
Model yedekleme
Bir sağlayıcıdaki tüm profiller başarısız olursa OpenClaw,agents.defaults.model.fallbacks içindeki bir sonraki modele geçer. Bu durum auth hataları, hız sınırları ve
profil döndürmeyi tüketen zaman aşımları için geçerlidir (diğer hatalar yedeklemeyi ilerletmez).
Aşırı yük ve hız sınırı hataları, faturalama cooldown sürelerinden daha agresif ele alınır.
Varsayılan olarak OpenClaw bir kez aynı sağlayıcı auth profili yeniden denemesine izin verir,
ardından beklemeden yapılandırılmış bir sonraki model yedeğine geçer.
ModelNotReadyException gibi sağlayıcı meşgul sinyalleri bu aşırı yük kovasına düşer.
Bunu auth.cooldowns.overloadedProfileRotations,
auth.cooldowns.overloadedBackoffMs ve
auth.cooldowns.rateLimitedProfileRotations ile ayarlayın.
Bir çalıştırma bir model geçersiz kılmasıyla başladığında (hook’lar veya CLI), yedeklemeler yapılandırılmış yedekler denendikten sonra yine de agents.defaults.model.primary ile sonlanır.
Aday zinciri kuralları
OpenClaw aday listesini o anda istenenprovider/model
ile yapılandırılmış yedeklerden oluşturur.
Kurallar:
- İstenen model her zaman ilk sıradadır.
- Açıkça yapılandırılmış yedekler yinelenenlerden arındırılır ancak model izin listesinden filtrelenmez. Açık operatör niyeti olarak değerlendirilirler.
- Geçerli çalıştırma zaten aynı sağlayıcı ailesindeki yapılandırılmış bir yedek üzerindeyse, OpenClaw tüm yapılandırılmış zinciri kullanmaya devam eder.
- Geçerli çalıştırma yapılandırmadan farklı bir sağlayıcı üzerindeyse ve bu geçerli model zaten yapılandırılmış yedek zincirinin bir parçası değilse, OpenClaw başka bir sağlayıcıdan ilgisiz yapılandırılmış yedekleri eklemez.
- Çalıştırma bir geçersiz kılma ile başladıysa, daha önceki adaylar tükendiğinde zincirin yeniden normal varsayılana yerleşebilmesi için yapılandırılmış birincil en sona eklenir.
Hangi hatalar yedeklemeyi ilerletir
Model yedekleme şu durumlarda devam eder:- auth hataları
- hız sınırları ve cooldown tükenmesi
- aşırı yük/sağlayıcı meşgul hataları
- zaman aşımı biçimli yedekleme hataları
- faturalama nedeniyle devre dışı bırakmalar
LiveSessionModelSwitchError; bu, eski bir kalıcı modelin dış bir yeniden deneme döngüsü oluşturmaması için yedekleme yoluna normalize edilir- başka tanınmayan hatalar, hâlâ kalan adaylar varsa
- zaman aşımı/yedekleme biçiminde olmayan açık iptaller
- sıkıştırma/yeniden deneme mantığı içinde kalması gereken bağlam taşması hataları
(örneğin
request_too_large,INVALID_ARGUMENT: input exceeds the maximum number of tokens,input token count exceeds the maximum number of input tokens,The input is too long for the modelveyaollama error: context length exceeded) - aday kalmadığında son bir bilinmeyen hata
Cooldown atlama ve yoklama davranışı
Bir sağlayıcı için her auth profili zaten cooldown durumundaysa OpenClaw o sağlayıcıyı otomatik olarak sonsuza kadar atlamaz. Aday başına karar verir:- Kalıcı auth hataları tüm sağlayıcıyı hemen atlar.
- Faturalama nedeniyle devre dışı bırakmalar genellikle atlanır, ancak kurtarma yeniden başlatmadan mümkün olsun diye birincil aday yine de bir sınırlama ile yoklanabilir.
- Birincil aday, sağlayıcı başına bir sınırlama ile cooldown bitimine yakın yoklanabilir.
- Aynı sağlayıcıdaki yedek kardeşler, hata geçici görünüyorsa (
rate_limit,overloadedveya bilinmeyen), cooldown’a rağmen denenebilir. Bu, özellikle bir hız sınırı model kapsamlı olduğunda ve kardeş bir model hemen toparlanabilecekse önemlidir. - Geçici cooldown yoklamaları, tek bir sağlayıcının sağlayıcılar arası yedeklemeyi durdurmaması için yedekleme çalıştırması başına sağlayıcı başına bir taneyle sınırlıdır.
Oturum geçersiz kılmaları ve canlı model geçişi
Oturum modeli değişiklikleri paylaşılan durumdur. Etkin çalıştırıcı,/model komutu,
sıkıştırma/oturum güncellemeleri ve canlı oturum uzlaştırması aynı oturum girdisinin
bölümlerini okur veya yazar.
Bu da yedek yeniden denemelerinin canlı model geçişiyle eşgüdüm kurması gerektiği anlamına gelir:
- Yalnızca açık kullanıcı odaklı model değişiklikleri bekleyen bir canlı geçişi işaretler. Buna
/model,session_status(model=...)vesessions.patchdahildir. - Yedek döndürme, heartbeat geçersiz kılmaları veya sıkıştırma gibi sistem odaklı model değişiklikleri kendi başına bekleyen bir canlı geçiş işaretlemez.
- Bir yedek yeniden deneme başlamadan önce yanıt çalıştırıcısı seçilen yedek geçersiz kılma alanlarını oturum girdisine kalıcı hale getirir.
- Canlı oturum uzlaştırması, eski çalışma zamanı model alanları yerine kalıcı oturum geçersiz kılmalarını tercih eder.
- Yedek denemesi başarısız olursa çalıştırıcı, yalnızca yazdığı geçersiz kılma alanlarını ve yalnızca bunlar hâlâ o başarısız adayla eşleşiyorsa geri alır.
- Birincil model başarısız olur.
- Yedek aday bellekte seçilir.
- Oturum deposu hâlâ eski birinciliği gösterir.
- Canlı oturum uzlaştırması eski oturum durumunu okur.
- Yeniden deneme, yedek deneme başlamadan önce eski modele geri çekilir.
Gözlemlenebilirlik ve hata özetleri
runWithModelFallback(...), günlükleri ve kullanıcıya dönük cooldown mesajlarını besleyen deneme başına ayrıntıları kaydeder:
- denenen sağlayıcı/model
- neden (
rate_limit,overloaded,billing,auth,model_not_foundve benzer yedekleme nedenleri) - isteğe bağlı durum/kod
- insan tarafından okunabilir hata özeti
FallbackSummaryError fırlatır. Dış yanıt
çalıştırıcısı bunu “tüm modeller geçici olarak hız sınırına takıldı” gibi daha
özel bir mesaj oluşturmak ve biliniyorsa en yakın cooldown bitiş süresini eklemek için kullanabilir.
Bu cooldown özeti model farkındalığına sahiptir:
- denenen sağlayıcı/model zinciri için ilgisiz model kapsamlı hız sınırları yok sayılır
- kalan engel eşleşen model kapsamlı bir hız sınırıysa, OpenClaw hâlâ o modeli engelleyen son eşleşen bitiş zamanını bildirir
İlgili yapılandırma
Şunlar için Gateway configuration belgesine bakın:auth.profiles/auth.orderauth.cooldowns.billingBackoffHours/auth.cooldowns.billingBackoffHoursByProviderauth.cooldowns.billingMaxHours/auth.cooldowns.failureWindowHoursauth.cooldowns.overloadedProfileRotations/auth.cooldowns.overloadedBackoffMsauth.cooldowns.rateLimitedProfileRotationsagents.defaults.model.primary/agents.defaults.model.fallbacksagents.defaults.imageModelyönlendirmesi