✨ [Beta] 프로젝트 관리

✨ [Beta] 프로젝트 관리 (Project Management)

LiteLLM의 프로젝트(Project)는 조직 계층에서 팀(Teams)과 키(Keys) 사이에 위치해요. 특정 사용 사례나 애플리케이션에 대한 세밀한 접근 제어와 예산 관리를 가능하게 해요.

Enterprise 기능이에요. 이 기능은 LiteLLM Enterprise 라이선스가 필요해요. 무료 30일 체험을 시작하거나 데모를 예약하세요. Enterprise가 포함하는 것을 확인하세요.

출처: 문서

본문

Enterprise 기능이에요.

이 기능은 LiteLLM Enterprise 라이선스가 필요해요. 무료 30일 체험을 시작하거나 데모를 예약하세요. Enterprise가 포함하는 것을 확인하세요.

LiteLLM의 프로젝트는 조직 계층에서 팀과 키 사이에 위치해요. 특정 사용 사례나 애플리케이션에 대한 세밀한 접근 제어와 예산 관리를 가능하게 해요.

계층 구조 : Organizations > Teams > Projects > Keys

빠른 시작 (Quick Start)

이 워크스루는 프로젝트를 만들고, API 키를 생성하고, 요청을 보내고, UI에서 프로젝트별 지출 추적을 보는 방법을 보여줘요.

1단계: 프로젝트 만들기

    curl --location 'http://0.0.0.0:4000/project/new' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "project_alias": "flight-search-assistant",
        "team_id": "ad898803-c8a3-4f4a-976a-a3c372cffa45",
        "models": ["gpt-5.6-terra", "gpt-5.6-luna"],
        "max_budget": 100,
        "metadata": {
            "use_case_id": "SNOW-12345",
            "responsible_ai_id": "RAI-67890"
        }
    }' | jq

응답:

    {
      "project_id": "e402a141-725a-4437-bff5-d47459189716",
      "project_alias": "flight-search-assistant",
      "team_id": "ad898803-c8a3-4f4a-976a-a3c372cffa45",
      "models": ["gpt-5.6-terra", "gpt-5.6-luna"],
      "max_budget": 100,
      ...
    }

2단계: 프로젝트용 API 키 생성하기

    curl 'http://0.0.0.0:4000/key/generate' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data-raw '{
        "models": ["gpt-5.6-luna", "gpt-5.6-terra"],
        "metadata": {"user": "[email protected]"},
        "project_id": "e402a141-725a-4437-bff5-d47459189716"
    }' | jq

응답:

    {
      "key": "«redacted:sk-…»",
      "key_name": "sk-...YiXA",
      "project_id": "e402a141-725a-4437-bff5-d47459189716",
      ...
    }

3단계: Chat Completions에서 API 키 사용하기

    curl http://localhost:4000/v1/chat/completions \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer ***' \
    --data '{
        "model": "gpt-5.6-terra",
        "messages": [{"role": "user", "content": "What is litellm?"}]
    }' | jq

4단계: UI에서 프로젝트 지출 보기

LiteLLM Admin UI의 Logs 페이지로 이동하세요. 요청 메타데이터에 추적되는 user_api_key_project_id를 볼 수 있어요:

Project Spend Tracking

위와 같이 지출 로그 메타데이터는 다음을 포함해요:

  • "user_api_key_project_id": "e402a141-725a-4437-bff5-d47459189716" - 요청을 프로젝트에 연결
  • 모든 비용과 토큰 사용량이 자동으로 프로젝트에 귀속
  • 상세 리포팅을 위해 프로젝트 ID로 로그를 조회·필터링 가능

API 엔드포인트

POST /project/new

새 프로젝트를 만들어요.

호출 가능자 : Admins 또는 Team Admins

파라미터:

  • project_alias (string, optional): 프로젝트의 사람이 읽을 수 있는 이름
  • team_id (string, required): 프로젝트가 속한 팀
  • models (array, optional): 프로젝트가 접근할 수 있는 모델 목록
  • max_budget (float, optional): 프로젝트의 최대 지출 예산
  • tpm_limit (int, optional): 분당 토큰 수 제한
  • rpm_limit (int, optional): 분당 요청 수 제한
  • budget_duration (string, optional): 예산 리셋 주기 (예: "30d", "1mo")
  • metadata (object, optional): 프로젝트의 커스텀 메타데이터
  • blocked (boolean, optional): 이 프로젝트의 모든 API 호출 차단

예시:

    curl --location 'http://0.0.0.0:4000/project/new' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "project_alias": "hotel-recommendations",
        "team_id": "team-123",
        "models": ["claude-sonnet-5"],
        "max_budget": 200,
        "tpm_limit": 100000,
        "metadata": {
            "use_case_id": "SNOW-12346",
            "cost_center": "travel-products"
        }
    }'

응답:

    {
        "project_id": "project-def",
        "project_alias": "hotel-recommendations",
        "team_id": "team-123",
        "models": ["claude-sonnet-5"],
        "spend": 0.0,
        "budget_id": "budget-xyz",
        "metadata": {
            "use_case_id": "SNOW-12346",
            "cost_center": "travel-products"
        },
        "created_at": "2025-01-15T10:00:00Z",
        "updated_at": "2025-01-15T10:00:00Z"
    }

POST /project/update

기존 프로젝트를 업데이트해요.

호출 가능자 : Admins 또는 Team Admins

파라미터:

  • project_id (string, required): 업데이트할 프로젝트
  • project_alias (string, optional): 업데이트된 프로젝트 이름
  • team_id (string, optional): 프로젝트를 다른 팀으로 이동
  • models (array, optional): 허용 모델의 업데이트된 목록
  • max_budget (float, optional): 업데이트된 예산
  • tpm_limit (int, optional): 업데이트된 TPM 제한
  • rpm_limit (int, optional): 업데이트된 RPM 제한
  • metadata (object, optional): 업데이트된 메타데이터
  • blocked (boolean, optional): 업데이트된 차단 상태

예시:

    curl --location 'http://0.0.0.0:4000/project/update' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "project_id": "project-abc",
        "max_budget": 200,
        "tpm_limit": 200000,
        "metadata": {
            "status": "production"
        }
    }'

GET /project/info

특정 프로젝트에 대한 정보를 가져와요.

파라미터:

  • project_id (string, required): 쿼리 파라미터

예시:

    curl --location 'http://0.0.0.0:4000/project/info?project_id=project-abc' \
    --header "Authorization: Bearer ***"

응답:

    {
        "project_id": "project-abc",
        "project_alias": "flight-search-assistant",
        "team_id": "team-123",
        "models": ["gpt-5.6-terra", "gpt-5.6-luna"],
        "spend": 45.67,
        "model_spend": {
            "gpt-5.6-terra": 42.30,
            "gpt-5.6-luna": 3.37
        },
        "litellm_budget_table": {
            "budget_id": "budget-xyz",
            "max_budget": 100.0,
            "tpm_limit": 100000,
            "rpm_limit": 100
        },
        "metadata": {
            "use_case_id": "SNOW-12345"
        }
    }

GET /project/list

사용자가 접근할 수 있는 모든 프로젝트를 나열해요.

예시:

    curl --location 'http://0.0.0.0:4000/project/list' \
    --header "Authorization: Bearer ***"

응답:

    [
        {
            "project_id": "project-abc",
            "project_alias": "flight-search-assistant",
            "team_id": "team-123",
            "spend": 45.67
        },
        {
            "project_id": "project-def",
            "project_alias": "hotel-recommendations",
            "team_id": "team-123",
            "spend": 23.45
        }
    ]

DELETE /project/delete

하나 이상의 프로젝트를 삭제해요.

호출 가능자 : Admins만

파라미터:

  • project_ids (array, required): 삭제할 프로젝트 ID 목록

예시:

    curl --location --request DELETE 'http://0.0.0.0:4000/project/delete' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "project_ids": ["project-abc", "project-def"]
    }'

참고 : 연결된 API 키가 있는 프로젝트는 삭제할 수 없어요. 먼저 키를 삭제하거나 재할당하세요.

모델별 할당량 (Model-Specific Quotas)

프로젝트 내에서 모델별로 다른 할당량을 설정할 수 있어요:

    curl --location 'http://0.0.0.0:4000/project/new' \
    --header "Authorization: Bearer ***" \
    --header 'Content-Type: application/json' \
    --data '{
        "project_alias": "multi-model-project",
        "team_id": "team-123",
        "models": ["gpt-5.6-terra", "gpt-5.6-luna", "claude-sonnet-5"],
        "max_budget": 500,
        "metadata": {
            "model_tpm_limit": {
                "gpt-5.6-terra": 50000,
                "gpt-5.6-luna": 200000,
                "claude-sonnet-5": 100000
            },
            "model_rpm_limit": {
                "gpt-5.6-terra": 50,
                "gpt-5.6-luna": 500,
                "claude-sonnet-5": 100
            }
        }
    }'

더 알아보기 (Learn more)

  • Enterprise: Enterprise 라이선스가 포함하는 것
  • 프로젝트 API: /project/new, /project/update, /project/info, /project/list, /project/delete