LiteLLM 예산 라우팅

LiteLLM 예산 라우팅 (Budget Routing)

예산 관리의 대상을 "어느 프로바이더에 얼마" 수준까지 끌어올릴 수 있습니다. LiteLLM의 Budget Routing은 프로바이더별·모델별·태그별로 예산을 정해두고, 예산이 남은 프로바이더로 요청을 라우팅해 줍니다. 예산이 단순히 "막는" 데서 그치지 않고, 어디로 보낼지까지 결정한다는 점이 특징입니다.

출처: 공식문서 - Budget Routing

라우팅으로 설정할 수 있는 예산

LiteLLM은 다음 단위로 예산을 설정할 수 있습니다.

  • 프로바이더 예산 — OpenAI 하루 $100, Azure 하루 $100
  • 모델 예산 — gpt-5.6-terra (https://api-base-1) 하루 $100, gpt-5.6-luna (https://api-base-2) 하루 $100
  • 태그 예산 — tag=product:chat-bot 하루 $10, tag=product:chat-bot-2 하루 $100

프로바이더 예산

LLM 프로바이더별로 예산을 설정합니다. 예: OpenAI 하루 $100, Azure 하루 $100.

Quick Start

proxy_config.yaml에 프로바이더 예산을 설정합니다.

model_list:
    - model_name: gpt-5.6-luna
      litellm_params:
        model: openai/gpt-5.6-luna
        api_key: os.environ/OPENAI_API_KEY

router_settings:
  provider_budget_config: 
    openai: 
      budget_limit: 0.000000000001 # float of $ value budget for time period
      time_period: 1d # can be 1d, 2d, 30d, 1mo, 2mo
    azure:
      budget_limit: 100
      time_period: 1d
    anthropic:
      budget_limit: 100
      time_period: 10d
    vertex_ai:
      budget_limit: 100
      time_period: 12d
    gemini:
      budget_limit: 100
      time_period: 12d
  
  # OPTIONAL: Set Redis Host, Port, and Password if using multiple instance of LiteLLM
  redis_host: os.environ/REDIS_HOST
  redis_port: os.environ/REDIS_PORT
  redis_password: os.environ/REDIS_PASSWORD

general_settings:
  master_key: sk-1234

테스트 요청 시 첫 번째 요청은 성공하고, 두 번째 요청은 openai 예산을 넘어 실패할 것으로 예상합니다.

curl -i http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-1234" \
  -d '{
    "model": "gpt-5.6-luna",
    "messages": [
      {"role": "user", "content": "hi my name is test request"}
    ]
  }'

어떻게 동작하나

예산 추적:

  • Redis로 각 프로바이더의 지출을 추적
  • 지정된 시간 기간(예: "1d", "30d") 동안 지출 추적
  • 시간 기간 만료 시 지출 자동 초기화

라우팅 로직:

  • 예산 한도 내에 있는 프로바이더로 요청 라우팅
  • 예산을 초과한 프로바이더는 건너뜀
  • 모든 프로바이더가 예산을 초과하면 오류 발생

지원 시간 기간:

  • 초: "Xs" (예: "30s")
  • 분: "Xm" (예: "10m")
  • 시간: "Xh" (예: "24h")
  • 일: "Xd" (예: "1d", "30d")
  • 월: "Xmo" (예: "1mo", "2mo")

요구 사항:

  • 인스턴스 간 지출 추적을 위해 Redis 필요
  • 프로바이더 이름은 LiteLLM 프로바이더 이름이어야 함

프로바이더 남은 예산 모니터링

예산·지출 정보 조회:

curl -X GET http://localhost:4000/provider/budgets \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-1234"

응답:

{
    "providers": {
        "openai": {
            "budget_limit": 1e-12,
            "time_period": "1d",
            "spend": 0.0,
            "budget_reset_at": null
        },
        "azure": {
            "budget_limit": 100.0,
            "time_period": "1d",
            "spend": 0.0,
            "budget_reset_at": null
        },
        "anthropic": {
            "budget_limit": 100.0,
            "time_period": "10d",
            "spend": 0.0,
            "budget_reset_at": null
        },
        "vertex_ai": {
            "budget_limit": 100.0,
            "time_period": "12d",
            "spend": 0.0,
            "budget_reset_at": null
        }
    }
}

Prometheus 메트릭 — 프로바이더 남은 예산(USD)을 추적하는 메트릭입니다.

litellm_provider_remaining_budget_metric{api_provider="openai"} 10

모델 예산

모델별로 예산을 설정합니다. 예: openai/gpt-5.6-terra 하루 $10, openai/gpt-5.6-luna 하루 $100.

model_listlitellm_paramsmax_budgetbudget_duration을 설정합니다.

model_list:
  - model_name: gpt-5.6-terra
    litellm_params:
      model: openai/gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY
      max_budget: 0.000000000001 # (USD)
      budget_duration: 1d # (Duration. can be 1s, 1m, 1h, 1d, 1mo)
  - model_name: gpt-5.6-luna
    litellm_params:
      model: openai/gpt-5.6-luna
      api_key: os.environ/OPENAI_API_KEY
      max_budget: 100 # (USD)
      budget_duration: 30d # (Duration. can be 1s, 1m, 1h, 1d, 1mo)

태그 예산 (Enterprise)

litellm_settings.tag_budget_config에 태그 예산을 설정합니다.

model_list:
  - model_name: gpt-5.6-terra
    litellm_params:
      model: openai/gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY

litellm_settings:
  tag_budget_config:
    product:chat-bot: # (Tag)
      max_budget: 0.000000000001 # (USD)
      budget_duration: 1d # (Duration)
    product:chat-bot-2: # (Tag)
      max_budget: 100 # (USD)
      budget_duration: 1d # (Duration)

테스트 요청 시 metadata.tagsproduct:chat-bot을 넣어 보냅니다.

멀티 인스턴스 설정

여러 인스턴스를 쓰는 환경에서는 Redis 호스트·포트·비밀번호를 설정해야 지출이 인스턴스 간에 동기화됩니다.

model_list:
    - model_name: gpt-5.6-luna
      litellm_params:
        model: openai/gpt-5.6-luna
        api_key: os.environ/OPENAI_API_KEY

router_settings:
  provider_budget_config: 
    openai: 
      budget_limit: 0.000000000001 # float of $ value budget for time period
      time_period: 1d # can be 1d, 2d, 30d, 1mo, 2mo
  
  # Set Redis Host, Port, and Password if using multiple instance of LiteLLM
  redis_host: os.environ/REDIS_HOST
  redis_port: os.environ/REDIS_PORT
  redis_password: os.environ/REDIS_PASSWORD

general_settings:
  master_key: sk-1234

provider_budget_config 스펙

provider_budget_config는 다음과 같은 딕셔너리입니다.

  • Key: 프로바이더 이름 (string) — 유효한 LiteLLM 프로바이더 이름이어야 함
  • Value: 다음 파라미터를 가진 예산 설정 객체
    • budget_limit: USD 예산을 나타내는 float 값
    • time_period: 기간 문자열 — 초 "Xs", 분 "Xm", 시간 "Xh", 일 "Xd", 월 "Xmo" 형식
provider_budget_config:
  openai:
    budget_limit: 100.0    # $100 USD
    time_period: "1d"      # 1 day period
  azure:
    budget_limit: 500.0    # $500 USD
    time_period: "30d"     # 30 day period
  anthropic:
    budget_limit: 200.0    # $200 USD
    time_period: "1mo"     # 1 month period
  gemini:
    budget_limit: 50.0     # $50 USD
    time_period: "24h"     # 24 hour period

더 알아보기