모델 프로바이더로 통합하기
모델 프로바이더로 통합하기 (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)
- OpenAI 호환 프로바이더라면 OpenAI 호환 프로바이더 추가하기(JSON)가 더 간단한 경로예요.