Amazon Bedrock Mantle
Amazon Bedrock Mantle
Amazon Bedrock Mantle는 Amazon Bedrock의 분산 추론 엔진(Project Mantle)으로, Bedrock 호스팅 모델용 OpenAI 호환 API를 노출해요. 이 공급자를 사용해 OpenAI 가격이 아닌 정확한 AWS Bedrock 가격으로 Bedrock Mantle 모델을 호출할 수 있어요.
모든 Bedrock Mantle 모델을 지원해요. litellm 요청 시
model=bedrock_mantle/<model-id>접두사로 설정하기만 하면 돼요.
출처: 문서
본문
Claude Mythos
Claude Mythos(anthropic.claude-mythos-preview)는 Bedrock Mantle에서 1M 토큰 입력 컨텍스트, 128K 출력, reasoning·vision·tool use 지원으로 사용 가능해요. 표준 AWS 자격 증명으로 bedrock_mantle/ 라우트 접두사를 사용하세요.
/messages
SDK:
import asyncio
import litellm
import os
os.environ['AWS_ACCESS_KEY_ID'] = "your-aws-access-key"
os.environ['AWS_SECRET_ACCESS_KEY'] = "your-aws-secret-key"
os.environ['AWS_REGION_NAME'] = "us-east-1"
async def main():
response = await litellm.anthropic_messages(
model="bedrock_mantle/anthropic.claude-mythos-preview",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain quantum entanglement simply."}],
)
print(response)
asyncio.run(main())
AI Gateway:
model_list:
- model_name: claude-mythos
litellm_params:
model: bedrock_mantle/anthropic.claude-mythos-preview
aws_region_name: us-east-1
litellm --config /path/to/config.yaml
curl -X POST http://0.0.0.0:4000/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "claude-mythos",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Explain quantum entanglement simply."}
]
}'
/chat/completions
SDK:
from litellm import completion
import os
os.environ['AWS_ACCESS_KEY_ID'] = "your-aws-access-key"
os.environ['AWS_SECRET_ACCESS_KEY'] = "your-aws-secret-key"
os.environ['AWS_REGION_NAME'] = "us-east-1"
response = completion(
model="bedrock_mantle/anthropic.claude-mythos-preview",
messages=[{"role": "user", "content": "Explain quantum entanglement simply."}],
)
print(response)
AI Gateway:
model_list:
- model_name: claude-mythos
litellm_params:
model: bedrock_mantle/anthropic.claude-mythos-preview
aws_region_name: us-east-1
litellm --config /path/to/config.yaml
curl -X POST http://0.0.0.0:4000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "claude-mythos",
"messages": [
{"role": "user", "content": "Explain quantum entanglement simply."}
]
}'
/v1/messages의 Claude 모델
Claude Mythos를 포함한 모든 bedrock_mantle/anthropic.claude-* 모델은 chat completions로 브리지되지 않고, Bedrock Mantle의 네이티브 Anthropic Messages 엔드포인트(https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages)에서 /v1/messages로 서비스돼요. Mantle은 Claude 모델에 대한 chat completions 브리지를 거부해요. 이것이 Claude Code와 Anthropic SDK들이 통신하는 표면이며, LiteLLM은 요청을 Anthropic 고유 와이어 형식으로 전달하므로 스트리밍, 도구, thinking이 그대로 통과해요. 다른 Mantle 모델(아래 GPT 모델 등)은 /v1/messages에서 Responses API 브리지를 계속 사용해요.
bedrock_mantle/anthropic.claude-sonnet-5 또는 bedrock_mantle/anthropic.claude-haiku-4-5 같은 bare Mantle 모델 id를 사용하세요. us. inference-profile 접두사는 Mantle에서 404를 반환해요.
SDK:
import asyncio
import litellm
import os
os.environ['AWS_ACCESS_KEY_ID'] = "your-aws-access-key"
os.environ['AWS_SECRET_ACCESS_KEY'] = "your-aws-secret-key"
os.environ['AWS_REGION_NAME'] = "us-east-2"
async def main():
response = await litellm.anthropic_messages(
model="bedrock_mantle/anthropic.claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain quantum entanglement simply."}],
)
print(response)
asyncio.run(main())
AI Gateway:
model_list:
- model_name: claude-sonnet-mantle
litellm_params:
model: bedrock_mantle/anthropic.claude-sonnet-5
aws_region_name: us-east-2
aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID
aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY
litellm --config /path/to/config.yaml
curl -X POST http://0.0.0.0:4000/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "claude-sonnet-mantle",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Explain quantum entanglement simply."}
]
}'
지역은 aws_region_name에서, 없으면 모델 이름의 지역 접두사(bedrock_mantle/us-east-2/anthropic.claude-sonnet-5), 없으면 Mantle을 가리키는 api_base 또는 BEDROCK_MANTLE_API_BASE의 호스트, 없으면 BEDROCK_MANTLE_REGION, AWS_REGION_NAME, AWS_REGION, 마지막으로 us-east-1 순서로 정해져요. 사용자 지정 api_base(VPC 엔드포인트 또는 Mantle 앞의 proxy)는 호스트로 유지되고 /openai/v1 또는 /v1 접미사 유무와 무관하게 /anthropic/v1/messages가 그 뒤에 붙어요.
인증은 공급자의 나머지와 동일한 체인이에요: api_key, BEDROCK_MANTLE_API_KEY, AWS_BEARER_TOKEN_BEDROCK 중 설정된 것이 있으면 bearer 토큰, 그 외에는 aws_access_key_id/aws_secret_access_key/aws_session_token, aws_profile_name 또는 role 파라미터의 SigV4. LiteLLM은 모든 요청에 anthropic-version: 2023-06-01을 보내며, 호출자가 보낸 anthropic-version 헤더가 우선해요.
베타 기능은 anthropic-beta 헤더로 이동해요: 호출자가 보내는 값에 요청이 필요한 값(context_management 편집은 context-management-2025-06-27 추가)을 더한 것으로, Mantle이 허용하는 것으로 제한돼요. Mantle이 모르는 값은 요청을 400으로 실패시키는 대신 빠지며, Mantle이 헤더가 있을 때 무시하는 body anthropic_beta 필드에는 아무것도 보내지 않아요.
OpenAI 모델 (GPT-5.4 / GPT-5.5)
/responses
SDK:
import litellm
import os
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-bedrock-api-key"
os.environ['BEDROCK_MANTLE_REGION'] = "us-east-2"
response = litellm.responses(
model="bedrock_mantle/openai.gpt-5.6-terra",
input="Hello! How can you help me today?",
)
print(response)
스트리밍:
import litellm
import os
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-bedrock-api-key"
response = litellm.responses(
model="bedrock_mantle/openai.gpt-5.6-terra",
input="Tell me a three sentence bedtime story about a unicorn.",
stream=True,
)
for event in response:
print(event)
AI Gateway:
model_list:
- model_name: gpt-5.5-mantle
litellm_params:
model: bedrock_mantle/openai.gpt-5.6-terra
api_key: os.environ/BEDROCK_MANTLE_API_KEY
api_base: https://bedrock-mantle.us-east-2.api.aws/v1
litellm --config /path/to/config.yaml
curl -X POST http://0.0.0.0:4000/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{
"model": "gpt-5.5-mantle",
"input": "Hello! How can you help me today?"
}'
OpenAI SDK:
from openai import OpenAI
client = OpenAI(
api_key="sk-<your-litellm-api-key>",
base_url="http://0.0.0.0:4000",
)
response = client.responses.create(
model="gpt-5.5-mantle",
input="Hello! How can you help me today?",
)
print(response)
API 키 (API Key)
# env variable
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-aws-bedrock-api-key"
# optional: override region (defaults to us-east-1)
os.environ['BEDROCK_MANTLE_REGION'] = "us-east-1" # or use AWS_REGION
지원 모델 (Supported Models)
| 모델 | 엔드포인트 | 컨텍스트 창 | 입력 (백만 토큰당) | 출력 (백만 토큰당) |
|---|---|---|---|---|
| openai.gpt-5.5 | /responses | 1.05M | $5.50 | $33.00 |
| openai.gpt-5.4 | /responses | 1.05M | $2.75 | $16.50 |
| openai.gpt-oss-120b | /chat/completions | 131K | $0.15 | $0.60 |
| openai.gpt-oss-20b | /chat/completions | 131K | $0.07 | $0.30 |
| openai.gpt-oss-safeguard-120b | /chat/completions | 131K | $0.15 | $0.60 |
| openai.gpt-oss-safeguard-20b | /chat/completions | 131K | $0.07 | $0.20 |
샘플 사용법 (Sample Usage)
SDK:
from litellm import completion
import os
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-bedrock-api-key"
response = completion(
model="bedrock_mantle/openai.gpt-oss-120b",
messages=[{"role": "user", "content": "hello from litellm"}],
)
print(response)
스트리밍:
from litellm import completion
import os
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-bedrock-api-key"
response = completion(
model="bedrock_mantle/openai.gpt-oss-120b",
messages=[{"role": "user", "content": "hello from litellm"}],
stream=True,
)
for chunk in response:
print(chunk)
비동기:
import asyncio
from litellm import acompletion
import os
os.environ['BEDROCK_MANTLE_API_KEY'] = "your-bedrock-api-key"
async def main():
response = await acompletion(
model="bedrock_mantle/openai.gpt-oss-120b",
messages=[{"role": "user", "content": "hello from litellm"}],
)
print(response)
asyncio.run(main())
지역 설정 (Region Configuration)
API base URL은 https://bedrock-mantle.{region}.api.aws/v1이에요. 지역은 이 순서로 해석돼요:
- 배포의
aws_region_name(또는 kwarg로 전달) - 모델 이름의 지역 접두사, 예:
bedrock_mantle/us-gov-west-1/xai.grok-4.3 BEDROCK_MANTLE_REGION환경 변수AWS_REGION_NAME환경 변수, 그다음AWS_REGION- 기본값: us-east-1
명시적 api_base(또는 BEDROCK_MANTLE_API_BASE)는 파생 URL을 완전히 대체해요. 모델 이름 접두사는 요청 전에 제거되므로 bedrock_mantle/us-gov-west-1/xai.grok-4.3은 us-gov-west-1에서 xai.grok-4.3을 호출해요. 이는 LiteLLM이 Bedrock에 대해 아는 지역에서 인식되며, aws_region_name은 모든 지역에서 동작해요. /v1/messages의 Claude 모델은 /v1 대신 /anthropic/v1/messages 경로를 사용하고 사용자 지정 api_base를 호스트로 유지해요.
지원 지역: us-east-1, us-east-2, us-west-2, eu-west-1, eu-west-2, eu-central-1, eu-south-1, eu-north-1, ap-northeast-1, ap-south-1, ap-southeast-3, sa-east-1, us-gov-west-1(AWS GovCloud)
GovCloud 가격
비용 추적은 서비스된 지역을 사용해요. 가격 맵에 bedrock_mantle/{region}/{model} 행(오늘은 us-gov-west-1 행)이 있으면, 지역이 aws_region_name에서 왔든 모델 접두사에서 왔든 그 행이 상업용 대신 호출을 가격 책정해요. 아래 두 배포 모두 xai.grok-4.3을 GovCloud 요율로 청구해요:
model_list:
- model_name: grok-4.3-gov
litellm_params:
model: bedrock_mantle/xai.grok-4.3
aws_region_name: us-gov-west-1
aws_access_key_id: os.environ/AWS_GOV_ACCESS_KEY_ID
aws_secret_access_key: os.environ/AWS_GOV_SECRET_ACCESS_KEY
- model_name: grok-4.3-gov-prefixed
litellm_params:
model: bedrock_mantle/us-gov-west-1/xai.grok-4.3
aws_access_key_id: os.environ/AWS_GOV_ACCESS_KEY_ID
aws_secret_access_key: os.environ/AWS_GOV_SECRET_ACCESS_KEY
base_model 또는 자체 input_cost_per_token/output_cost_per_token을 설정한 배포는 그 행만으로 가격이 책정되며, 서비스된 지역이 그 위에 적용되지 않아요.
LiteLLM Proxy 사용법
1. config.yaml에 Bedrock Mantle 모델 설정:
model_list:
- model_name: gpt-5.5-mantle
litellm_params:
model: bedrock_mantle/openai.gpt-5.6-terra
api_key: os.environ/BEDROCK_MANTLE_API_KEY
api_base: "https://bedrock-mantle.us-east-2.api.aws/v1"
- model_name: gpt-oss-120b
litellm_params:
model: bedrock_mantle/openai.gpt-oss-120b
api_key: os.environ/BEDROCK_MANTLE_API_KEY
# optional region override:
# api_base: "https://bedrock-mantle.us-east-1.api.aws/v1"
- model_name: gpt-oss-20b
litellm_params:
model: bedrock_mantle/openai.gpt-oss-20b
api_key: os.environ/BEDROCK_MANTLE_API_KEY
2. Proxy 시작:
litellm --config /path/to/config.yaml
3. OpenAI SDK로 호출:
import openai
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000",
)
response = client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user", "content": "hello from litellm"}],
)
print(response)