출력
출력 (Output)
형식
다음은 모든 모델의 모든 litellm completion 호출에서 기대할 수 있는 정확한 JSON 출력과 타입이에요.
{
'choices': [
{
'finish_reason': str, # String: 'stop'
'index': int, # Integer: 0
'message': { # Dictionary [str, str]
'role': str, # String: 'assistant'
'content': str # String: "default message"
}
}
],
'created': str, # String: None
'model': str, # String: None
'usage': { # Dictionary [str, int]
'prompt_tokens': int, # Integer
'completion_tokens': int, # Integer
'total_tokens': int # Integer
}
}
OpenAI가 허용하는 것처럼 응답을 사전으로 또는 클래스 객체로 접근할 수 있어요.
print(response.choices[0].message.content)
print(response['choices'][0]['message']['content'])
예시 응답은 다음과 같습니다.
{
'choices': [
{
'finish_reason': 'stop',
'index': 0,
'message': {
'role': 'assistant',
'content': " I'm doing well, thank you for asking. I am Claude, an AI assistant created by Anthropic."
}
}
],
'created': 1691429984.3852863,
'model': 'claude-sonnet-5',
'usage': {'prompt_tokens': 18, 'completion_tokens': 23, 'total_tokens': 41}
}
출처: 문서
본문
네이티브 종료 이유 (Native Finish Reason)
LiteLLM은 모든 프로바이더별 finish_reason 값을 OpenAI 호환 값(stop, length, tool_calls, function_call, content_filter)으로 매핑합니다. 원래 프로바이더 값이 매핑된 값과 다르면 provider_specific_fields["native_finish_reason"] 에 보존됩니다.
이것은 서로 다른 중지 조건을 구분해야 하는 에이전트 루프에 유용해요 (예: Gemini의 MALFORMED_FUNCTION_CALL vs 일반 stop).
response = completion(model="gemini/gemini-3.8-flash", messages=messages)
choice = response.choices[0]
print(choice.finish_reason) # "stop" (OpenAI-compatible)
# Access the original provider value when it differs:
if hasattr(choice, "provider_specific_fields") and choice.provider_specific_fields:
native = choice.provider_specific_fields.get("native_finish_reason")
if native == "MALFORMED_FUNCTION_CALL":
# Handle malformed function call differently from a normal stop
pass
프로바이더가 이미 OpenAI 호환 값(예: stop)을 반환하면 native_finish_reason 은 설정되지 않습니다.
추가 속성
지연 시간 같은 정보에도 접근할 수 있어요.
from litellm import completion
import os
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"
messages=[{"role": "user", "content": "Hey!"}]
response = completion(model="claude-sonnet-5", messages=messages)
print(response.response_ms) # 616.25