LiteLLM

LiteLLM 5강

[SDK] 예외 처리 & 자동 재시도

공급자마다 에러 형식이 다르지만, LiteLLM은 모든 에러를 OpenAI 예외 타입으로 매핑한다. 덕분에 기존 try/except 코드를 그대로 쓸 수 있고, num_retries로 일시적 오류를 자동 재시도한다.

LiteLLM 5강 구성도

이 강의 목표는 주요 예외 타입을 알고, 재시도·타임아웃·폴백을 조합해 견고한 호출을 만드는 것이다.

1. 통합 예외 타입

예외 상황
AuthenticationError 키 오류(401)
RateLimitError 호출 한도 초과(429)
Timeout 응답 지연
APIError / ServiceUnavailableError 서버 오류(5xx)
ContextWindowExceededError 토큰 한도 초과
ContentPolicyViolationError 정책 위반

2. 재시도 · 타임아웃

from litellm import completion
resp = completion(
    model="openai/gpt-4o",
    messages=msgs,
    num_retries=3,     # 실패 시 지수 백오프로 3회 재시도
    timeout=30,        # 30초 초과 시 Timeout
)

3. 예외별 처리 · 폴백

from litellm import completion
from litellm.exceptions import RateLimitError, ContextWindowExceededError

try:
    resp = completion(model="openai/gpt-4o", messages=msgs, num_retries=2)
except RateLimitError:
    resp = completion(model="anthropic/claude-sonnet-4", messages=msgs)
except ContextWindowExceededError:
    resp = completion(model="openai/gpt-4o", messages=msgs[-4:])  # 이력 축소

핵심 명령·용어

이름
num_retries 자동 재시도 횟수(지수 백오프)
timeout 응답 대기 상한(초)
litellm.exceptions OpenAI 호환 예외 모듈
폴백 실패 시 다른 모델로 전환

예제

import litellm
litellm.drop_params = True   # 공급자가 지원 안 하는 파라미터는 자동 제거
resp = completion(model="anthropic/claude-sonnet-4",
                  messages=msgs, top_logprobs=5)  # 미지원이어도 에러 안 남

해설) drop_params=True는 특정 공급자가 지원하지 않는 인자를 조용히 떼어내 BadRequestError를 예방한다. 멀티공급자 코드에서 유용하다.

댓글 0