Entegrasyon rehberleri · 2026-08-28

Meta Muse Spark 1.2 Contributor’da 429: sınırlı yeniden deneme

Muse Spark Contributor isteklerinde LLMTR 429 hatasını sağlayıcı erişilemezliğinden ayırın; Retry-After, süre bütçesi ve sınırlı Python yeniden denemesi kullanın.

Meta Muse Spark 1.2 Contributor’da 429: sınırlı yeniden deneme konusu için üç ayrı bilgi kutusunu karşılaştıran veya sıralayan açıklayıcı LLMTR rehber şeması.

429 ile 503 aynı teşhis değildir

Meta Muse Spark 1.2 Contributor çağrısında hata aldığınızda yalnızca 429 sayısını aramayın: HTTP durumunu ve error.type alanını birlikte okuyun. 28 Ağustos 2026’da incelenen LLMTR davranışında, sağlayıcıdan gelen 429 istemciye 503 model_unavailable olarak yansıtılır. LLMTR’nin kendi istek hızı sınırı ise 429 rate_limit_error döndürebilir.

503, sizin fazla istek gönderdiğinizin kanıtı değildir; başka erişilebilirlik sorunlarını da kapsayabilir. Bekleyip sınırlı sayıda tekrar denemek makuldür, fakat her 503’ü kesin bir Meta kota teşhisine çevirmeyin. Kullanıcıya denemenin ertelendiğini söylemek, yanlış bir hız limiti açıklamasından daha anlaşılırdır.

Veri sınırını önce belirleyin

Contributor katmanında istemler ve tamamlamalar Meta’nın model eğitiminde kullanılabilir. Gizli, kişisel veya müşteri verisi göndermeyin. Aşağıdaki örnek yalnızca hayalî görevleri anlatan bir istem kullanır; gerçek destek kayıtlarını, özel depo dosyalarını veya erişim anahtarlarını deneme girdisine eklemeyin.

LLMTR model kartı bu katmanın kapasitesini paylaşılan bir sınır olarak bildirir. Bu yüzden yoğun yük testi yapmayın. Meta’nın model ve fiyat/hız limiti sayfaları 28 Ağustos 2026 kontrolünde oturum gerektirdiğinden güncel RPM, token hızı veya günlük hak rakamı burada doğrulanmış kabul edilmez.

Hata gövdesinden karar çıkarın

Contributor adı ücretsiz günlük kota anlamına gelmez. Ücretsiz modeller için kullanılan kota sinyalini bu modele otomatik olarak atamayın. Ortak istemciniz farklı modeller de çağırıyorsa error.details.reason alanını ayrıca okuyun; aynı HTTP durumunun farklı nedenleri olabilir.

İstemcinin gördüğü yanıt ve uygun işlem
YanıtAnlamıİşlem
429 / rate_limit_errorLLMTR istek hızı sınırı olabilir.Eşzamanlılığı azaltın; sınırlı bekleyin.
429 / rate_limit_error + details.reason: free_quota_exhaustedÜcretsiz model kotası sinyali; Contributor hakkı kanıtı değildir.Kısa döngüyü durdurun; bildirilen sıfırlanmayı bekleyin.
503 / model_unavailableSağlayıcı hız sınırı dahil erişilemezlik nedenleri olabilir.Az sayıda deneyin; sürerse işi erteleyin.
400, 401 veya 403İstek, kimlik doğrulama veya erişim sorunu olabilir.İsteği ya da hesabı düzeltmeden tekrarlamayın.

Tek döngüye deneme ve süre sınırı koyun

Örnek Python 3.11 veya üstünü ve openai paketini kullanır. LLMTR_BASE_URL değerini LLMTR’nin tam API temel adresi olarak, LLMTR_API_KEY değerini kendi LLMTR anahtarınız olarak ayarlayın; bunlar doğrudan Meta hesabının bilgileri değildir. Çağrı POST /v1/chat/completions içindir.

İlk çağrı dahil üç deneme ve toplam 45 saniye, bu örneğin uygulama tercihidir; sağlayıcı limiti veya yanıt süresi garantisi değildir. SDK’nin varsayılan otomatik tekrarları max_retries=0 ile kapanır. Retry-After saniye veya HTTP tarihi olarak okunur; kalan bütçeye sığmıyorsa daha erken denemek yerine hata döndürülür.

Ağ çağrısı canlı olarak doğrulanmamış, sınırları açık Python örneği

import asyncio
import os
import random
from datetime import datetime, timezone
from email.utils import parsedate_to_datetime
from openai import AsyncOpenAI, APIStatusError

MAX_ATTEMPTS = 3
MAX_ELAPSED = 45.0

def retry_after_seconds(value):
    if not value:
        return 0.0
    value = value.strip()
    try:
        if value.isascii() and value.isdigit():
            return int(value)
        when = parsedate_to_datetime(value)
        return max(0.0, (when - datetime.now(timezone.utc)).total_seconds())
    except (ValueError, TypeError, OverflowError):
        return 0.0

async def main():
    async with AsyncOpenAI(
        api_key=os.environ["LLMTR_API_KEY"],
        base_url=os.environ["LLMTR_BASE_URL"],
        max_retries=0,
        timeout=15.0,
    ) as client:
        loop = asyncio.get_running_loop()
        deadline = loop.time() + MAX_ELAPSED
        async with asyncio.timeout_at(deadline):
            for attempt in range(1, MAX_ATTEMPTS + 1):
                try:
                    return await client.chat.completions.create(
                        model="meta/muse-spark-1.2-contributor",
                        messages=[{
                            "role": "user",
                            "content": "Explain a queue using imaginary tasks.",
                        }],
                        reasoning_effort="minimal",
                        max_tokens=1024,
                        stream=False,
                    )
                except APIStatusError as exc:
                    try:
                        payload = exc.response.json()
                    except ValueError:
                        payload = {}
                    error = payload.get("error", {}) if isinstance(payload, dict) else {}
                    if not isinstance(error, dict):
                        raise
                    details = error.get("details", {})
                    quota = isinstance(details, dict) and details.get("reason") == "free_quota_exhausted"
                    retryable = (
                        (exc.status_code == 429 and error.get("type") == "rate_limit_error")
                        or (exc.status_code == 503 and error.get("type") == "model_unavailable")
                    )
                    if quota or not retryable or attempt == MAX_ATTEMPTS:
                        raise
                    hint = retry_after_seconds(exc.response.headers.get("Retry-After"))
                    backoff = min(8.0, 2.0 ** attempt)
                    delay = max(backoff, hint) + random.uniform(0.0, 0.5)
                    if delay >= deadline - loop.time():
                        raise
                    await asyncio.sleep(delay)

if __name__ == "__main__":
    result = asyncio.run(main())

Kuyruğu da sınırlayın

Yeniden deneme, yeni kullanıcı işleriyle aynı eşzamanlılık denetiminden geçmelidir. Her başarısız isteğe yeni bir çalışan açarsanız bekleme ekleseniz bile toplam trafik büyür. Küçük bir çalışan havuzu, sınırlı kuyruk ve iş son kullanma süresi belirleyin; eski işleri yeniden deneme kuyruğunda sonsuza kadar taşımayın.

Rastgele ek bekleme, birlikte başarısız olan istemcilerin aynı anda geri dönmesini azaltır; kapasite yaratmaz. Tekrarlanan 503’lerde yeni iş kabulünü geçici olarak azaltın. Kullanıcının maliyet ve veri politikası onayı olmadan başka ücretli modele geçiş kurmayın.

Durunca neyi kaydedin?

Tanı için zaman, model kimliği, HTTP durumu, hata türü, deneme sayısı, toplam bekleme ve varsa istek kimliği yeterlidir. İstemleri, model yanıtlarını, Authorization başlığını veya tüm hata gövdesini loglamayın. Uzayan arızada bu güvenli metaveriyi destek talebine ekleyin.

Örnek bağlantı kopması veya zaman aşımını otomatik tekrarlamaz: isteğin işlenip işlenmediği belirsiz olabilir. İstemci beklemesinin bitmesi sağlayıcıdaki işlemin iptal edildiğini garanti etmez. Başarılı 200 yanıtının içerik doğrulaması da yeniden deneme politikasından ayrı tutulmalıdır.

Sık sorulan sorular

Retry-After yoksa hemen tekrar deneyebilir miyim?

Hayır. Başlığın bulunmaması kapasitenin açıldığı anlamına gelmez. Örnekte artan bekleme ve rastgele ek süre kullanılır; üç deneme veya toplam süre sınırına ulaşıldığında işlem durur.

503 alınca LLMTR bakiyesi yüklemeli miyim?

503 model_unavailable tek başına bakiye eksikliği göstermez. Hata türünü okuyun; kendi bakiyenizle sağlayıcı erişilebilirliğini birbirine karıştırmayın. Sınırlı deneme sonrasında aynı hata sürüyorsa destek isteyin.

SDK tekrarları açık kalsa ne olur?

Uygulama döngünüzün her adımı ayrıca SDK içinde tekrarlanabilir. Böylece düşündüğünüzden fazla ağ isteği oluşur. Tekrar politikasını tek katmanda tutun ve örnekteki gibi SDK tekrarlarını kapatın.

İlgili yazılar