본문으로 건너뛰기
마크다운으로 보기

레이트 리밋

레이트 리밋은 조직 단위로 적용됩니다. 현재 기본값은 다음과 같습니다.

  • 요청: 기본값은 조직당 60 RPM(분당 요청 수)입니다. 초과하면 429가 반환됩니다.
  • 토큰: TPM(분당 토큰 수)은 기본 무제한이며, 운영팀이 조직별 한도를 설정할 수 있습니다. 초과하면 429가 반환됩니다.
  • 동시성: 조직당 동시 요청은 8건입니다. 8건이 처리 중일 때 들어온 요청은 모델에 도달하기 전에 즉시 429로 거부됩니다.
참고
조직의 현재 한도는 콘솔의 조직 → 개요에서 확인할 수 있습니다. 위 기본값은 서비스가 발전하면서 바뀔 수 있으며, 부하 테스트 등으로 더 높은 한도가 필요하면 실행 전에 문의하세요.

한도 초과 시

한도를 초과하면 429 Too Many Requests 상태가 반환됩니다. 분당 요청 또는 분당 토큰 429에는 x-ratelimit-reset 헤더가 실립니다. 값은 현재 1분 윈도우가 리셋될 때까지 남은 초입니다. 나머지 헤더는 한도 종류에 따라 다릅니다. 분당 요청 429에는 x-ratelimit-limit과 x-ratelimit-remaining이, 분당 토큰 429에는 x-ratelimit-limit-tokens와 x-ratelimit-remaining-tokens가 함께 실립니다. 동시성 429는 이후 단계에서 반환되며 이 헤더가 하나도 없으므로 지수 백오프로 재시도하세요.

재시도 가이드

  • 429와 5xx 응답은 재시도하세요. 400/401/403 같은 4xx는 재시도하지 마세요.
  • 지터를 포함한 지수 백오프를 사용하세요(예: 1s, 2s, 4s, ... 상한 적용).
  • 분당 요청 또는 분당 토큰 429에서는 지연 시간을 추측하지 말고 x-ratelimit-reset 초만큼 기다리세요. 동시성 429에는 이 헤더가 없으므로 지수 백오프를 사용하세요.
  • 총 재시도 횟수를 제한하고(예: 5회) 사용자에게 명확한 에러를 표시하세요.

상태 코드로 분기하고, 응답에 x-ratelimit-reset이 있으면 그 값을 읽는 재시도 루프입니다. 동시성 429와 5xx에는 리셋 헤더가 없으므로 지수 백오프를 사용합니다.

Python
import random
import time

def post_with_retry(client, path, payload, max_attempts=5):
    for attempt in range(max_attempts):
        r = client.post(path, json=payload)
        if r.status_code < 400:
            return r
        # 400, 401, 402, 403, 404 and 405 describe the request. Fix it instead.
        if r.status_code != 429 and r.status_code < 500:
            r.raise_for_status()
        reset = r.headers.get("x-ratelimit-reset")
        if reset is not None:
            delay = float(reset)          # requests/min or tokens/min limit
        else:
            delay = min(2 ** attempt, 30) # concurrency 429 and 5xx: no reset header
        time.sleep(delay + random.uniform(0, 1))
    r.raise_for_status()

크레딧 소진

크레딧 잔액이 0이 되면 요청이 차단되고 402 Payment Required 상태가 반환됩니다. 잔액은 크레딧 페이지에서 확인하세요.

전체 상태 코드 목록은 에러 페이지를 참고하세요.