İçeriğe geç

Kombolar: yük devretme ve yük dengeleme

Bir kombo (combo), gerçek sağlayıcı/model hedeflerinin sıralı bir listesini sunan tek bir sanal modeldir. İstemciniz combo/<kimlik> ister; opencodex bir hedef seçer, isteği o somut sağlayıcı/model’e yeniden yazar ve ilk hedefte yeniden denenebilir bir arıza olduğunda başka bir hedefi deneyebilir.

Bu, aşağıdakilerden birini istediğinizde yararlıdır:

  • Yük Devretme (Failover): bir modeli tercih edin, ancak yedekleri hazır tutun.
  • Yük Dengeleme (Load Balancing): başarılı istekleri ağırlıklı gruplar halinde modellere veya sağlayıcılara dağıtın.

Kombolar normal sağlayıcı yönlendirmesinin önünde yer alır. sağlayıcı/model seçicileri sizin için yeniyse önce Model Yönlendirme sayfasını okuyun.

Bu örnek, birinci olarak Anthropic ve ikinci olarak OpenAI ile combo/main oluşturur. Her iki sağlayıcı da zaten var olmalı ve etkinleştirilmelidir.

Terminal window
ocx combo set main --targets anthropic/claude-opus-4-8,openai/gpt-5.6-sol

Varsayılan strateji yük devretmedir, bu nedenle normal bir istek anthropic/claude-opus-4-8’e gider. Bu denemede yeniden denenebilir bir hata olursa opencodex openai/gpt-5.6-sol’a geçebilir.

Sanal modeli normalde bir model kimliği sağlayacağınız her yerde kullanın:

{
"model": "combo/main",
"input": "Explain why the sky looks blue."
}

Kaydedilen tanımı onaylayın:

Terminal window
ocx combo show main

ocx combo set <kimlik> komutundaki kombo kimliği bir harf veya rakamla başlamalıdır. Daha sonra toplamda 64 karaktere kadar harfler, rakamlar, ., _ veya - içerebilir. Kurallı model kimliği her zaman combo/<kimlik> olur; örneğin main kimliği combo/main haline gelir.

combo/ ad alanı, kombolar yapılandırıldığı sürece ayrılmıştır. combo adlı bir sağlayıcı onu işgal edemez ve bir kombo kimliği yapılandırılmış bir sağlayıcı adını yineleyemez.

İsteğe bağlı bir takma ad, komboya farklı bir genel model adı verir. Bir takma ad:

  • bir kimlikle aynı karakterleri kullanır;
  • daily-fast gibi yalın olabilir veya team/daily-fast gibi bir / içerebilir;
  • combo olamaz veya combo/ ile başlayamaz;
  • başka bir kombo takma adını yineleyemez; ve
  • normalde gpt-, o1-, o3-, o4- veya codex- ile başlayan yalın bir yerel OpenAI ailesi adı olamaz. Aşağıdaki açık Desktop uyumluluk modu tek istisnadır.

Bir takma ad ayarlandığında bile kurallı combo/<kimlik> formu yine de çözümlenir. Kurallı arama takma ad eşleştirmesinden önce çalışır, bu nedenle bir takma ad başka bir kombonun kurallı kimliğini devralamaz.

Bazı Codex Desktop sürümleri, uygulama sunucusu model_catalog_json’ı zaten yükledikten sonra uzak bir yalnızca yerel available_models izin listesi uygular. Nova1/codex-gpt-5.6-sol gibi normal yönlendirilen kimlikler daha sonra CLI tarafından kullanılabilir ancak Desktop seçicisinde bulunmaz. Bu, opencodex #241 tarafından izlenen yukarı akış Codex Desktop hatasıdır.

Eşdeğer bir yönlendirilmiş hedefi denetlediğinizde, bir kombo açıkça bir yerel slug’ı devralabilir:

Terminal window
ocx combo set nova-sol \
--targets Nova1/codex/gpt-5.6-sol \
--alias gpt-5.6-sol \
--native-alias \
--display-name 'Nova1 - codex-gpt-5.6-sol'

Bu mod kasıtlı olarak isteğe bağlıdır ve hem --native-alias hem de boş olmayan bir görüntüleme etiketi gerektirir. Takma ad, bu opencodex sürümü tarafından desteklenen yerel model kimliklerinden biri olmalıdır; yalnızca yerel aile öneki kabul edilmez çünkü kaldırma işlemi yetkili meta verileri geri yükleyebilmelidir. Yönlendirilen hedefin keşif yanıtı yalnızca bir model kimliği sağladığında, uyumluluk satırı eksik bağlam, modalite ve akıl yürütme meta verilerini değiştirdiği yerel kimlikten doldurur. Açık hedef sınırları yine de kazanır, bu nedenle bu geri dönüş asla bir bağlam sınırını yükseltmez veya bildirilen yetenekleri geçersiz kılmaz. Tam yönlendirme önceliğini değiştirir: gpt-5.6-sol istekleri, kurallı OpenAI yerel aile rotasından önce combo/nova-sol’a çözümlenir. Katalog, yinelenen yerel ve kombo satırları değil, yapılandırılmış görüntüleme etiketine sahip tek bir yalın satır içerir. Yalnızca yalın gpt-5.6-sol slug’ı yakalanır. main/gpt-5.6-sol gibi hesap nitelikli satırlar ve openai-apikey/gpt-5.6-sol gibi sağlayıcı nitelikli satırlar ayrı OpenAI rotaları olarak kalır; sağlayıcı nitelikli API anahtarı rotası asla yerel takma ada düşmez.

Görünürlük anahtarları belirsiz kalmaz:

  • combo/nova-sol, uyumluluk kombosunu keşiften gizler.
  • disabledModels içindeki yalın gpt-5.6-sol girdisi, uykudaki yerel OpenAI satırı anlamına gelmeye devam eder; şu anda bu genel slug’a sahip olan komboyu gizlemez.
  • En az bir yerel takma ad yapılandırıldığında, devre dışı bırakılmış yalın yerel satırlar visibility: "hide" olarak tutulmak yerine geçerli Codex kataloğundan çıkarılır. Bu, Desktop’ın izin listesinin göstermemesi gereken satırları yeniden canlandırmasını önler. Modeller sayfası yine de gölgelenmemiş yerel anahtarları listeler ve birini yeniden etkinleştirmek korunmuş veya geçerli yerel meta verilerini geri yükler.

Yük Devretme (Failover): sıralı birincil ve yedekler

Bölüm başlığı “Yük Devretme (Failover): sıralı birincil ve yedekler”

failover, yapılandırma sırasındaki ilk uygun hedefi seçer. Bir hedef, sağlayıcısı mevcut olduğunda, etkinleştirildiğinde, soğumada olmadığında ve herhangi bir özel istek kısıtlamasını işleyebildiğinde uygundur. Ağırlıklar ve stickyLimit bu stratejiyi etkilemez.

Bu sıra verildiğinde:

  1. anthropic/claude-opus-4-8
  2. openai/gpt-5.6-sol
  3. google/gemini-3-pro

her istek Anthropic ile başlar. Yeniden denenebilir bir Anthropic hatası bu isteği OpenAI’ye taşır; yeniden denenebilir bir OpenAI hatası onu Google’a taşıyabilir. Bir terminal hatası kalan hedefleri denemek yerine hemen durur.

round-robin pürüzsüz ağırlıklı round-robin kullanır. Daha büyük bir hedef ağırlığı, payının tamamını tek bir uzun blok olarak göndermeden bu hedefe zaman içinde daha büyük bir pay verir. stickyLimit, bir sonraki ağırlıklı seçimden önce seçilen hedefte kaç başarılı isteğin kalacağını denetler.

İki başarılı istekten oluşan gruplarla 2:1 oranında bir kombo oluşturun:

Terminal window
ocx combo set balanced \
--targets anthropic/claude-opus-4-8:2,openai/gpt-5.6-sol:1 \
--strategy round-robin \
--sticky 2

Hedefleri A (ağırlık 2) ve B (ağırlık 1) olarak adlandırırsak, ilk altı ağırlıklı seçim A, B, A, A, B, A olur. stickyLimit 2 olduğu için her seçim iki başarılı istek boyunca aktif kalır:

Başarılı istek 1 2 3 4 5 6 7 8 9 10 11 12
Hedef A A B B A A A A B B A A

Uzun vadeli pay hala 2:1’dir. Yeniden denenebilir bir hata geçerli yapışkan grubu sonlandırır, bu hedefi soğutur ve aynı istek için başka bir uygun hedef seçer.

random, her istek için uygun hedeflerden birini weight ile orantılı olasılıkla seçer. Her istek bağımsız bir seçimdir; bu nedenle trafik, round-robin stratejisinin belirleyici düzeni veya yapışkanlığı olmadan hedeflere dağılır. stickyLimit bu stratejiyi etkilemez.

least-used: en az başarılı isteğe sahip hedefi tercih et

Bölüm başlığı “least-used: en az başarılı isteğe sahip hedefi tercih et”

least-used, her isteği bu opencodex sürecinin kaydettiği en az başarılı istek sayısına sahip uygun hedefe yönlendirir. Sayaçlar yeniden başlatmada sıfırdan başlar ve eşitliklerde yapılandırma sırası korunur. weight değerleri ve stickyLimit bu stratejiyi etkilemez.

reset-window, her isteği önbelleğe alınmış sağlayıcı kota anlık görüntüsünde yaklaşan en yakın pencere sıfırlaması (beş saatlik, haftalık, aylık veya özel) görünen uygun hedefe yönlendirir. Böylece ilk yenilenecek sağlayıcının kotası kullanılır. Güncel kota verisi bulunmayan hedeflerde ve eşitliklerde yapılandırma sırası korunur. weight değerleri ve stickyLimit bu stratejiyi etkilemez.

Bu sıralama ve gönderim öncesi sağlayıcı elemesi, mevcut tek API anahtarının model çıkarımı kullanımının tamamına uygulanan güncel sınırlara dayanır. OAuth veya geçerli hesap özetleri, çağıranın kimlik bilgilerini ileten rotalar, birden fazla anahtar ve kimlik bilgileri ya da hedefi değişmiş anlık görüntüler, bu ön kararda yalnızca görüntüleme amaçlıdır. Authorization, x-api-key veya x-goog-api-key başlıkları kimlik bilgilerini geçersiz kıldığında da aynı kural uygulanır; yalnızca arama veya MCP için olan pencereler hariç tutulur. Uygun hedeflerin hiçbirinde geçerli sıfırlama bilgisi yoksa yapılandırma sırası kullanılır. Hesap seçimi ve yeniden denemelerde normal sınırlar uygulanmaya devam eder.

Kombo hataları atlama (hop) hataları ve uç (terminal) hatalar olarak ikiye ayrılır.

Sonuç Davranış
HTTP 401, 403, 404, 408, 429 veya herhangi bir 5xx Hedefi soğutun ve bir sonraki uygun hedefe atlayın.
Sınıflandırılmış kimlik doğrulama, abonelik, kota, hız sınırı, aşırı yük veya yukarı akış sunucu hatası Yalnızca durum yeterli olmadığında bile hedefi soğutun ve atlayın.
İstemci iptali (499), origin_rejected, siber politika reddi, bağlam taşması veya diğer geçersiz istek Durun ve hatayı döndürün; başka bir hedef isteği geçerli kılmaz.
user alanını açıkça reddeden, reasoning.effort/reasoning_effort için desteklenmeyen değer bildiren veya modele özgü görüntü girdisini reddeden (param: input) yapılandırılmış HTTP 400 Çıktı başlamadan önce bekleme süresi kaydetmeden sonraki uygun hedefe atlar; aşağıdaki isteğe bağlı parametre uyumluluğuna bakın.
Diğer sınıflandırılmamış hatalar Durun ve hatayı döndürün.

Atlanan bir hedef varsayılan olarak 60 saniye boyunca soğuma süresine girer. Yukarı akış yanıtı geçerli bir Retry-After değeri içeriyorsa opencodex bunun yerine onu kullanır. Sayısal saniyeler ve HTTP tarihi değerleri kabul edilir ve her soğuma süresi en fazla 10 dakika ile sınırlandırılır.

Geçerli istek denenen aynı hedefi asla yeniden denemez. Daha sonraki istekler soğuma süresi dolana kadar onu atlar. Uygun hiçbir hedef kalmazsa proxy error.code = "combo_unavailable" ile HTTP 503 döndürür.

defaultEffort, combo varsayılanı null değilse ve hedefin desteklenen seviye listesi bilinen ve boş olmayan bir listeyse eksik reasoning.effort değerini doldurur. Yapılandırılmış değer destekleniyorsa korunur; değilse bu değeri aşmayan en yüksek desteklenen seviye, böyle bir seviye yoksa en düşük desteklenen seviye kullanılır. Liste bilinmiyor veya boşsa varsayılan eklenmez.

Varsayılan ekleme mevcut effort ve diğer reasoning alanlarını korur. Aşağıdaki yetenek normalizasyonu desteklenmeyen effort/thinking denetimlerini ayrıca kaldırabilir. Desteklenen varsayılanlar: low, medium, high, xhigh, max, ultra; alanı atlamak veya null kullanmak eklemeyi kapatır.

reasoningEffortMode varsayılan olarak "strict" kullanır: açıkça boş listeler dahil tüm hedeflerin effort listelerinin kesişimi yayımlanır. "adaptive", karma kombolarda seçiciyi korumak için boş listeleri kesişimden çıkarır. Bilinmeyen listeler her iki modda da katalog kesişimini sınırlamaz.

Gönderim sırasında açıkça boş liste her iki modda effort ve thinking denetimlerini kaldırır; bilinmeyen liste bunları yalnızca adaptive modunda kaldırır. reasoning.summary ve effort dışındaki alanlar korunur. Bilinen, boş olmayan hedeflerin effort çözümü değişmez. strict modundaki bilinmeyen hedefler ve normal native Chat bilinmeyen bildirimleri çağıranın denetimlerini korur. Varsayılan değer ekleme mevcut effort değerini değiştirmez; yetenek normalizasyonu desteklenmeyen denetimleri kaldırabilir.

Codex v2 alt ajanları için önemli bir sınırlama vardır (sorun #92). Yerel bir üst ajan, yeni oluşturulan bir çalışanın görevini yalnızca yerel ChatGPT arka ucu için basılmış şifreli metin olarak gönderebilir. Harici bir sağlayıcı bu yükü okuyamaz.

Böyle bir istek için bir kombo, yeniden denenebilir bir arızadan sonra da dahil olmak üzere uygun hedeflerini kurallı yerel ChatGPT rotalarına filtreler. Kombonun şifre çözme yeteneğine sahip hiçbir hedefi yoksa opencodex göndermeden önce durur ve HTTP 400 döndürür:

{
"error": {
"type": "invalid_request_error",
"code": "unreadable_encrypted_agent_task"
}
}

Bu, görevin okunabilir talimatlar alamayacak bir sağlayıcıya gönderilmesini engeller. Okunabilir düz metin görevleri normal kombo stratejisini kullanır.

Dört kurtarma seçeneğiniz vardır:

  1. Çocuk için yerel bir ChatGPT modeli seçin.
  2. Komboya kurallı bir yerel ChatGPT hedefi ekleyin.
  3. Farklı sağlayıcılar arasında yetkilendirme için v1 yüzeyini kullanın.
  4. Arayanı denetliyorsanız, görevi düz metin v2 agent_message içeriği olarak yeniden gönderin.

v1/base/v2 modları ve tam şifrelenmiş görev iş akışı için Alt Ajan Arayüzü sayfasına bakın.

Yerel kontrol panelini açın ve Modeller → Kombolar seçeneğini belirleyin. Çalışma alanı komboları oluşturur, düzenler, yeniden adlandırır ve kaldırır; hedef seçicisi ise devre dışı bırakılmış modelleri ve iç içe geçmiş komboları hariç tutar.

Her hedef ayrıca canlı bir kota rozeti gösterir: Kullanılabilir, Kota tükendi veya Kota bilinmiyor. Düzenleyici, kota nedeniyle Kaydet ve Oluştur işlemlerini yalnızca kullanılabilir hedeflerin tümü için yapılandırılmış kimlik bilgisine ait çıkarım sınırının tükendiğini doğrulayan geçerli sunucu bilgisi varsa engeller. Yalnızca görüntüleme amaçlı hesap, model, arama ve MCP kotaları ya da eksik veya süresi dolmuş yönlendirme kanıtları bu engellemeye neden olmaz. Engelleme, ilgili sıfırlama zamanında veya verinin güncellik süresi dolduğunda sona erer ve sayfa etkin ya da görünür olduğunda yeniden kontrol edilir; Yenile, hem kombo verilerini hem de kotaları yeniden yükler.

Birincil komutlar şunlardır:

Terminal window
ocx combo list
ocx combo show <kimlik>
ocx combo set <kimlik> --targets saglayici/model[:agirlik],...
ocx combo remove <kimlik> --yes

set ayrıca --strategy, --sticky, --effort, --alias, --native-alias, --display-name ve --rename-from kabul eder. Bu alanı temizlemek için --effort, --alias veya --display-name değeri olarak - kullanın. --native-alias, şu anda desteklenen yalın bir yerel model takma adı ve boş olmayan bir görüntüleme adı gerektirir. create ve update, set’in takma adlarıdır; delete, remove’un takma adıdır; ve aynı alt komutlar ocx route combo altında mevcuttur.

Başsız istemciler /api/combos üzerinde GET, PUT ve DELETE kullanır. GET normalleştirilmiş kombo tanımlarını listeler, PUT bir tane oluşturur veya değiştirir (ve birini yeniden adlandırabilir) ve DELETE kimlik sorgu parametresini alır. Kimlik doğrulama ve istek/yanıt ayrıntıları Yönetim API’si referansı içindedir.

Kalıcı hale getirilmiş tam yapılandırma için bkz. Yapılandırma.

Kombolar, kombo kimliğine göre anahtarlanan üst düzey combos nesnesinde saklanır:

{
"combos": {
"balanced": {
"targets": [
{ "provider": "anthropic", "model": "claude-opus-4-8", "weight": 2 },
{ "provider": "openai", "model": "gpt-5.6-sol", "weight": 1 }
],
"strategy": "round-robin",
"stickyLimit": 2,
"defaultEffort": "high",
"alias": "team/balanced"
}
}
}
Alan Gerekli Varsayılan Kurallar
targets Evet Yapılandırılmış { provider, model, weight? } hedeflerinin boş olmayan sıralı dizisi. Yinelenen sağlayıcı/model çiftleri reddedilir.
targets[].weight Hayır 1 1 ile 10.000 arasında tam sayı. round-robin ve random tarafından kullanılır; failover, least-used ve reset-window tarafından yok sayılır.
strategy Hayır "failover" İzin verilen değerler: "failover", "round-robin", "random", "least-used", "reset-window".
stickyLimit Hayır 1 Yalnızca round-robin için geçerlidir; seçim başına 1 ile 100 arasında başarılı istek tam sayısı.
defaultEffort Hayır null low, medium, high, xhigh, max veya ultra; yalnızca arayan çabayı atladığında ve hedef desteği bildirdiğinde uygulanır.
reasoningEffortMode Hayır "strict" strict veya adaptive; karma yetenek kesişimini ve hedefe özel normalizasyonu seçer.
alias Hayır yok İsteğe bağlı kırpılmış genel model kimliği; yukarıdaki takma ad kurallarını kullanın. Boş bir değer takma ad yok olarak saklanır.
nativeAlias Hayır false Şu anda desteklenen yalın bir yerel alias’ın yönlendirme ve katalog önceliği almasına açıkça izin verin. Asla takma addan çıkarılmaz.
displayName Hayır yok Sınırlı salt görüntüleme katalog etiketi. nativeAlias true olduğunda gerekli ve boş değildir.

Kombo kimliği bilinmiyor. Yanıt, invalid_request_error türünde HTTP 404’tür. ocx combo list çalıştırın, yazımı ve büyük/küçük harf durumunu kontrol edin ve yönetim komutunuzun model isteklerini alan çalışan aynı opencodex örneğine yazdığını onaylayın.

Her hedef şu anda uygun değildir: örneğin sağlayıcısı devre dışıdır, soğumaktadır, bu istek için zaten denenmiştir veya şifrelenmiş bir v2 görevi onu hariç tutmaktadır. Hedef sağlayıcı durumunu ve son yukarı akış hatalarını kontrol edin. Soğuma süreleri için 60 saniyelik varsayılanı veya yukarı akış Retry-After süresini (asla 10 dakikadan fazla olamaz) bekleyin, ardından yeniden deneyin.

Önce takma ad dilbilgisini ve ayrılmış adları kontrol edin. Yinelenen bir takma ad veya geçersiz şekil HTTP 400 olarak reddedilir. İlk bölümü yapılandırılmış bir Codex hesap ad alanı olan eğik çizgili bir takma ad HTTP 409 olarak reddedilir; farklı bir takma ad ad alanı seçin. CLI ve kontrol paneli sunucunun tam doğrulama mesajını görüntüler.

Hata hedefe özgü olmaktan ziyade uç (terminal) bir hataydı. Geçersiz girdiyi düzeltin, aşırı büyük bir bağlamı azaltın, bir politika reddini işleyin veya reddedilen istek kaynağını düzeltin. Kombolar bu durumlar için atlama yapmaz.

Sonlandırıcı 400 hatalarının dar bir istisnası vardır: user alanını açıkça reddeden, reasoning.effort/reasoning_effort için desteklenmeyen değer bildiren veya modele özgü görüntü girdisini reddeden (param: input) yapılandırılmış hata, çıktı başlamadan önce sonraki uygun hedefe geçebilir. Bu uyumsuzluk için bekleme süresi kaydedilmez. Güvenlik politikası reddi, iptal ve başlamış çıktı yeniden yürütülmez.

Canonical compatibility details.