LiteLLM 커스텀 단가

LiteLLM 커스텀 단가 (Custom LLM Pricing)

기본 단가표에 없는 커스텀 모델을 쓰거나, 프로바이더별 할인·마진을 내부 정산에 반영하고 싶을 때가 있습니다. LiteLLM의 custom pricing은 모든 LLM 프로바이더에 대해 유연한 비용 추적과 단가 커스터마이징을 제공합니다.

출처: 공식문서 - Custom LLM Pricing

개요

LiteLLM은 모든 LLM 프로바이더에 대해 다음 단가 커스터마이징을 지원합니다.

  • Custom Pricing — 기본 모델 비용을 덮어쓰거나 커스텀 모델 단가 설정
  • Cost Per Token — 입력/출력 토큰 기반 비용 추적 (가장 흔한 방식)
  • Cost Per Second — 실행 시간 기반 비용 추적 (예: Sagemaker)
  • Zero-Cost Models — 무료/온프레미스 모델은 비용을 0으로 설정해 예산 검사를 우회
  • Provider Discounts — 특정 프로바이더에 퍼센트 할인 적용
  • Provider Margins — 내부 정산을 위해 LLM 비용에 수수료/마진 추가
  • Base Model Mapping — Azure 배포에서 정확한 비용 추적 보장

성공 시(동기+비동기) 응답 비용은 로깅 객체에서 kwargs["response_cost"]로 접근할 수 있습니다.

참고: LiteLLM은 이미 100개 이상의 모델에 대한 단가를 model cost map에 갖고 있습니다.

초당 비용 (Cost Per Second, 예: Sagemaker)

프로바이더 Proxy에서 사용

Step 1: config.yaml에 단가 추가

model_list:
  - model_name: sagemaker-completion-model
    litellm_params:
      model: sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4
    model_info:
      input_cost_per_second: 0.000420
  - model_name: sagemaker-embedding-model
    litellm_params:
      model: sagemaker/berri-benchmarking-gpt-j-6b-fp16
    model_info:
      input_cost_per_second: 0.000420 

Step 2: Proxy 시작

litellm /path/to/config.yaml

Step 3: 스펜드 로그 확인

토큰당 비용 (Cost Per Token, 예: Azure)

model_list:
  - model_name: azure-model
    litellm_params:
      model: azure/<your_deployment_name>
      api_key: os.environ/AZURE_API_KEY
      api_base: os.environ/AZURE_API_BASE
      api_version: os.environ/AZURE_API_VERSION
    model_info:
      input_cost_per_token: 0.000421 # 👈 ONLY to track cost per token
      output_cost_per_token: 0.000520 # 👈 ONLY to track cost per token

모델 비용 맵 덮어쓰기 (Override Model Cost Map)

이미 맵에 있는 모델의 단가를 자기 단가로 덮어쓸 수 있습니다. 모델의 config에 model_info 키를 추가하고 원하는 키를 덮어쓰면 됩니다.

예: prod/claude-sonnet-5 모델의 Anthropic 단가 덮어쓰기.

model_list:
  - model_name: "prod/claude-sonnet-5"
    litellm_params:
      model: "anthropic/claude-sonnet-5"
      api_key: os.environ/ANTHROPIC_PROD_API_KEY
    model_info:
      input_cost_per_token: 0.000006
      output_cost_per_token: 0.00003
      cache_creation_input_token_cost: 0.0000075
      cache_read_input_token_cost: 0.0000006

추가 비용 키

다양한 시나리오·모달리티에 대해 비용을 지정할 수 있는 키가 더 있습니다.

  • input_cost_per_token_above_200k_tokens — 컨텍스트가 200k 토큰을 넘을 때 입력 토큰 비용
  • output_cost_per_token_above_200k_tokens — 컨텍스트가 200k 토큰을 넘을 때 출력 토큰 비용
  • cache_creation_input_token_cost_above_200k_tokens — 대형 컨텍스트 캐시 생성 비용
  • cache_read_input_token_cost_above_200k_token — 대형 컨텍스트 캐시 읽기 비용
  • input_cost_per_image — 멀티모달 요청의 이미지당 비용
  • output_cost_per_reasoning_token — reasoning 토큰 비용 (예: OpenAI o1 모델)
  • input_cost_per_audio_token — 오디오 입력 토큰 비용
  • output_cost_per_audio_token — 오디오 출력 토큰 비용
  • input_cost_per_video_per_second — 비디오 입력 초당 비용
  • input_cost_per_video_per_second_above_128k_tokens — 대형 컨텍스트 비디오 비용
  • input_cost_per_character — 일부 프로바이더의 문자 기반 단가
  • input_cost_per_token_priority / output_cost_per_token_priority — 우선순위/PayGo 단가 (Vertex AI Gemini, Bedrock)
  • input_cost_per_token_flex / output_cost_per_token_flex — 배치/flex 단가

이 키들은 새 모델이 멀티모달을 다루는 방식에 따라 계속 진화합니다. 최신 버전은 https://github.com/BerriAI/litellm/blob/main/model_prices_and_context_window.json 에서 확인하세요.

서비스 티어 / PayGo 단가 (Vertex AI, Bedrock)

여러 단가 티어를 지원하는 프로바이더(예: Vertex AI PayGo, Bedrock 서비스 티어)의 경우 LiteLLM은 응답에 따라 올바른 비용을 자동으로 적용합니다.

  • Vertex AI Gemini: usageMetadata.trafficType 사용 (ON_DEMAND_PRIORITY → priority, FLEX/BATCH → flex)
  • Bedrock: 응답의 serviceTier 사용

Zero-Cost 모델 (예산 검사 우회)

사용 사례: 온프레미스 또는 무료 모델이 있어서, 사용자가 예산 한도를 넘어도 그 모델은 계속 접근 가능해야 하는 경우.

해결책 ✅: input_cost_per_tokenoutput_cost_per_token을 둘 다 0으로 설정(명시적으로)하면 해당 모델에 대한 모든 예산 검사를 우회합니다.

참고: 모델이 제로 비용으로 설정되면 LiteLLM은 그 모델로 가는 요청에 대해 모든 예산 검사(user, team, team member, end-user, organization, global proxy budget)를 자동으로 건너뜁니다.

중요: 두 비용 모두 명시적으로 0으로 설정해야 합니다. 비용이 null이나 undefined면 모델은 비용이 있는 것으로 취급되어 예산 검사가 적용됩니다.

model_list:
  # On-premises model - free to use
  - model_name: on-prem-llama
    litellm_params:
      model: ollama/llama3
      api_base: http://localhost:11434
    model_info:
      input_cost_per_token: 0   # 👈 Explicitly set to 0
      output_cost_per_token: 0  # 👈 Explicitly set to 0
  
  # Paid cloud model - budget checks apply
  - model_name: gpt-5.6-terra
    litellm_params:
      model: gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY
    # No model_info - uses default pricing from cost map

동작 — 위 설정을 쓰면:

  • 사용자 예산 초과 → on-prem-llama는 여전히 사용 가능 ✅, gpt-5.6-terra는 차단 ❌
  • 팀 예산 초과 → on-prem-llama는 여전히 사용 가능 ✅, gpt-5.6-terra는 차단 ❌
  • 엔드 유저 예산 초과 → on-prem-llama는 여전히 사용 가능 ✅, gpt-5.6-terra는 차단 ❌

이렇게 하면 예산 제약이 있어도 무료/온프레미스 모델은 계속 접근 가능하고, 유료 모델은 여전히 제대로 관리됩니다.

비용 추적용 'base_model' 설정 (예: Azure 배포)

문제: Azure는 azure/gpt-4-1106-preview를 써도 응답에서 gpt-4를 돌려줍니다. 이 때문에 비용 추적이 부정확해집니다.

해결책 ✅: LiteLLM이 Azure 비용 계산에 올바른 모델을 쓰도록 config에 base_model을 설정합니다.

model_list:
  - model_name: azure-gpt-3.5
    litellm_params:
      model: azure/chatgpt-v-2
      api_base: os.environ/AZURE_API_BASE
      api_key: os.environ/AZURE_API_KEY
      api_version: "2023-07-01-preview"
    model_info:
      base_model: azure/gpt-5.6-terra

날짜 버전이 붙은 OpenAI 모델

base_model은 OpenAI가 설정한 모델 이름과 다른 날짜 버전 모델명을 응답으로 돌려줄 때도 유용합니다.

예: gpt-4o-mini-audio-preview에 커스텀 단가를 설정했는데 OpenAI가 gpt-4o-mini-audio-preview-2024-12-17을 응답으로 돌려주는 경우입니다. LiteLLM은 단가 조회에 응답 모델명을 쓰므로, 커스텀 단가가 적용되지 않습니다.

해결책 ✅: LiteLLM이 단가 조회에 쓸 키로 base_model을 설정합니다.

model_list:
  - model_name: my-audio-model
    litellm_params:
      model: openai/gpt-4o-mini-audio-preview
      api_key: os.environ/OPENAI_API_KEY
    model_info:
      base_model: gpt-4o-mini-audio-preview  # 👈 Used for pricing lookup
      input_cost_per_token: 0.0000006
      output_cost_per_token: 0.0000024
      input_cost_per_audio_token: 0.00001
      output_cost_per_audio_token: 0.00002

디버깅

커스텀 단가가 적용되지 않거나 오류가 나면 아래를 확인하세요.

  • LITELLM_LOG="DEBUG" 또는 --detailed_debug CLI 플래그로 Proxy 실행
litellm --config /path/to/config.yaml --detailed_debug
  • 로그에서 이 라인을 확인: LiteLLM:DEBUG: utils.py:263 - litellm.acompletion
  • acompletion 함수의 최상위 키에 input_cost_per_tokenoutput_cost_per_token이 있는지 확인
acompletion(
  ...,
  input_cost_per_token: my-custom-price, 
  output_cost_per_token: my-custom-price,
)

이 키들이 없으면 LiteLLM은 커스텀 단가를 쓰지 않습니다. 문제가 지속되면 GitHub에 이슈를 올리세요.

더 알아보기