모델 프로바이더로 통합하기

모델 프로바이더로 통합하기 (Integrate as a Model Provider)

LiteLLM에 새 모델 프로바이더를 통합하는 방법을 소개할게요. OpenAI 호환 API라면 JSON 파일 하나만 수정해도 되고, 그 외에는 클래스와 설정을 작성해 채팅 프로바이더로 동작하게 만들면 됩니다.

출처: 문서

본문

OpenAI 호환 프로바이더를 위한 빠른 시작 (Quick Start)

API가 OpenAI 호환이라면 하나의 JSON 파일만 수정하면 지원을 추가할 수 있어요. 간단한 방법은 OpenAI 호환 프로바이더 추가하기 문서를 참고해 주세요.

이 가이드는 채팅 프로바이더로 동작하기 위한 클래스와 설정 작성에 초점을 맞춰요. 임베딩이나 이미지 생성 같은 다른 프로바이더로 동작하는 방법은 먼저 이 가이드를 읽고 코드베이스의 기존 코드를 살펴보는 것을 권장합니다.

개요 (Overview)

프로바이더로 통합하려면 API에 끼워지는 모듈을 작성해, liteLLM API와 여러분 API 사이의 어댑터 역할을 하게 만들면 돼요. 작성할 모듈은 **설정(config)**과 요청·응답을 변환하는 어댑터 두 역할을 모두 합니다.

1. 설정 클래스 만들기 (Create Your Config Class)

먼저 프로바이더 이름으로 새 디렉터리를 만들어요.

litellm/llms/your_provider_name_here

그 안에 채팅 설정을 위한 파일을 추가해요.

litellm/llms/your_provider_name_here/chat/transformation.py

transformation.py 파일에는 여러분 API가 liteLLM API에 어떻게 끼워질지 결정하는 설정 클래스가 들어가요. BaseConfig를 상속받는 설정 클래스를 정의해요.

from litellm.llms.base_llm.chat.transformation import BaseConfig

class MyProviderChatConfig(BaseConfig):
    def __init__(self):
        ...

추상 메서드는 나중에 채워 넣게 돼요.

2. 코드베이스의 여러 위치에 추가하기

litellm/__init__.py

파일 상단에서 키 목록에 여러분의 키를 옵션으로 추가해요.

azure_key: Optional[str] = None
anthropic_key: Optional[str] = None
replicate_key: Optional[str] = None
bytez_key: Optional[str] = None
cohere_key: Optional[str] = None
infinity_key: Optional[str] = None
clarifai_key: Optional[str] = None

설정을 import해요.

from .llms.bytez.chat.transformation import BytezChatConfig
from .llms.custom_llm import CustomLLM
from .llms.bedrock.chat.converse_transformation import AmazonConverseConfig
from .llms.openai_like.chat.handler import OpenAILikeChatConfig

litellm/main.py

main.py에 자신을 추가해 요청이 설정 클래스로 라우팅되게 해요.

from .llms.bedrock.chat import BedrockConverseLLM, BedrockLLM
from .llms.bedrock.embed.embedding import BedrockEmbedding
from .llms.bedrock.image.image_handler import BedrockImageGeneration
from .llms.bytez.chat.transformation import BytezChatConfig
from .llms.codestral.completion.handler import CodestralTextCompletion
from .llms.cohere.embed import handler as cohere_embed
from .llms.custom_httpx.aiohttp_handler import BaseLLMAIOHTTPHandler

base_llm_http_handler = BaseLLMHTTPHandler()
base_llm_aiohttp_handler = BaseLLMAIOHTTPHandler()
sagemaker_chat_completion = SagemakerChatHandler()
bytez_transformation = BytezChatConfig()

그다음 더 아래쪽에서:

elif custom_llm_provider == "bytez":
    api_key = (
        api_key
        or litellm.bytez_key
        or get_secret_str("BYTEZ_API_KEY")
        or litellm.api_key
    )

    response = base_llm_http_handler.completion(
        model=model,
        messages=messages,
        ...

litellm/constants.py

LITELLM_CHAT_PROVIDERS 목록에 자신을 추가해요.

LITELLM_CHAT_PROVIDERS = [
    "openai",
    "openai_like",
    "bytez",
    "xai",
    "custom_openai",
    "text-completion-openai",
    # ...
]

여기 있는 프로바이더 if 문 체인에도 자신을 추가해요.

litellm/litellm_core_utils/get_llm_provider_logic.py

if model == "*":
    custom_llm_provider = "openai"
# bytez models
elif model.startswith("bytez/"):
    custom_llm_provider = "bytez"
if not custom_llm_provider:
    if litellm.suppress_debug_info is False:
        print()  # noqa

3. 코드를 반복 개선할 테스트 파일 작성하기

import os
from litellm import completion

os.environ["MY_PROVIDER_KEY"] = "KEY_GOES_HERE"

completion(model="my_provider/your-model", messages=[...], api_key="...")

4. 필수 메서드 구현하기 (Implement Required Methods)

validate_environment

헤더를 설정하고 키/모델을 검증해요.

def validate_environment(*args, **kwargs):
    headers.update({
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    })
    return headers

get_complete_url

get_sync_custom_stream_wrapper / get_async_custom_stream_wrapper

필요하면 이 메서드들을 구현하면 돼요. 사용 방법은 litellm/llms/sagemaker/chat/transformation.py 또는 litellm/llms/bytez/chat/transformation.py 구현을 참고해 주세요.

마지막 생각 (Spare thoughts)

더 알아보기 (Learn more)