| id | api-bedrock | |
|---|---|---|
| categoria | api | |
| entidade | AWS Bedrock | |
| agente | api-bedrock | |
| thinker_ids |
|
|
| revisado_em | 2026-11-04 | |
| versao_observada | docs 2026-11-04 |
Especificação mantida pelo agente api-bedrock conforme .claude/external-research.md. O agente principal se baseia neste arquivo para escrever código compatível. Índice: docs/externos.
- O Bedrock tem dois endpoints de inferência:
bedrock-runtime(recomendado pela AWS) ebedrock-mantle. Os dois aceitam Chat Completions, Responses e Anthropic Messages; só o Runtime tem Converse/InvokeModel, perfis de inferência entre regiões (CRIS), Guardrails; só o Mantle temGET /v1/models,background=true, ferramentas server-side, Projects. - Chave de API do Bedrock (bearer) funciona nos dois endpoints, inclusive o plano de controle (
bedrock.<região>). Vale só na região em que foi gerada (chave de longo prazo). SigV4 também é aceito, mas o Thinker usa só bearer. - Os modelos GPT fechados da OpenAI (GPT-5.6+, GPT-6.x) só aceitam perfil CRIS (
us./global.) no Runtime; no Mantle usam o ID base e caminho/openai/v1, em us-east-1. - Preço por token é igual nos dois endpoints; CRIS geográfico dos EUA e Mantle in-Region custam ~10% a mais que o CRIS global (cartão do GPT-6 Sol).
- Lacunas abertas: G1 a G5 (3 com issue). Confiança média-alta nos documentos; comportamento ao vivo não foi testado (sem chave real).
| Endpoint | Base URL | APIs | Observação |
|---|---|---|---|
| Runtime | https://bedrock-runtime.{região}.amazonaws.com |
Converse, InvokeModel, Chat Completions, Responses, Messages | Todas as regiões do Bedrock (inclui GovCloud). Fonte: endpoints.html. |
| Mantle | https://bedrock-mantle.{região}.api.aws |
Chat Completions, Responses, Messages | Subconjunto de regiões: us-east-1, us-east-2, us-west-2, eu-central-1, eu-north-1, eu-south-1, eu-west-1, eu-west-2, ap-northeast-1, ap-south-1, ap-southeast-2, ap-southeast-3, sa-east-1, us-gov-east-1, us-gov-west-1. |
| Plano de controle | https://bedrock.{região}.amazonaws.com |
ListFoundationModels, ListInferenceProfiles, GetInferenceProfile |
O Thinker usa GET /inference-profiles com a mesma chave (comportamento do código; a doc confirma só a operação). |
Caminhos:
| API | Runtime | Mantle |
|---|---|---|
| Chat Completions | /openai/v1/chat/completions |
/v1/chat/completions na maioria dos modelos; /openai/v1/chat/completions em alguns (ex.: GPT-6 Sol) |
| Responses | /openai/v1/responses (+ GET/DELETE /{id}, POST /{id}/cancel) |
/v1/responses ou /openai/v1/responses, conforme o modelo |
| Messages (Anthropic) | /anthropic/v1/messages com x-api-key e anthropic-version: 2023-06-01 |
/anthropic/v1/messages com os mesmos cabeçalhos |
| Contagem de tokens | não para modelos só-CRIS | /anthropic/v1/messages/count_tokens (único caminho para Claude lançado só via CRIS); GPT não suporta |
- O prefixo errado no Mantle é rejeitado com
model <id> isn't supported on this route; cada cartão de modelo traz o prefixo correto na tabela "Programmatic access". - Autenticação:
Authorization: Bearer <chave>(OpenAI-compatível) oux-api-key(Messages). Variável oficial:AWS_BEARER_TOKEN_BEDROCK. A chave sozinha não dá acesso: o principal IAM precisa debedrock:InvokeModel(Runtime, no alvo e no projetodefaultpara Responses) oubedrock-mantle:CreateInference(Mantle); políticas podem negarbedrock:CallWithBearerToken. - Tipos de chave: curta (até 12 h, herda permissões da sessão, gerada por
aws-bedrock-token-generator) e longa (usuário IAM, validade configurada, só na região de criação; erroCredential should be scoped to a valid regionem região errada). O prefixo da chave (ABSK,bedrock-api-key-) que o Thinker usa para detectar região não aparece na doc (não confirmado). - Cabeçalhos extras suportados no Runtime:
X-Amzn-Bedrock-GuardrailIdentifier,X-Amzn-Bedrock-GuardrailVersion,X-Amzn-Bedrock-Trace;OpenAI-Projectsódefault.
- Listagem: só o Mantle implementa
GET /v1/models(formato OpenAI,Authorization: Bearer). O Runtime não temGET /openai/v1/models(devolve 404UnknownOperationException); a descoberta de perfis CRIS usaListInferenceProfiles(eListFoundationModels) no plano de controle. - IDs: ID base
fornecedor.modelo[-versão:n](ex.:openai.gpt-6-sol,anthropic.claude-sonnet-5,openai.gpt-oss-120b-1:0no Runtime). Perfis CRIS: prefixo geográfico + ID base (us.openai.gpt-6-sol,global.openai.gpt-6-sol). Prefixos citados no guia:us,eu,apac,in,global; GovCloud usaus-gov.. Perfis de aplicação (application inference profiles) são rejeitados com 400 na Responses do Runtime e não são suportados em Responses/Chat Completions. - Modelos GPT fechados da OpenAI (GPT-5.6, GPT-6.x) no Runtime: só perfil CRIS, "você não pode usar o ID base para chamada in-Region". No Mantle: ID base, base path
/openai/v1, apenas us-east-1 (GPT-6 Sol). - Disponibilidade por endpoint (2026-11-04), resumo do que importa ao roteamento:
- Só Runtime: Claude Mythos 5.1, Opus 4.1/4.5/4.6, Sonnet 4/4.5/4.6, Claude 3 Haiku, DeepSeek-R1, Llama, Mistral Large/Small/Pixtral, Grok 4.7, Kimi K3, GLM 5.3, Palmyra X4/X5.
- Só Mantle: Claude Mythos 5, GPT-5.4, GPT-5.5, Daybreak Red/Blue (GPT-5.6 Cyber/Sol), Grok 4.3, Gemma 4.
- Ambos: Claude Haiku 5.5, Sonnet 5/5.5, Opus 4.7/4.8/5/5.5, Fable 5/5.1, Haiku 4.5, GPT-6.1 Sol, GPT-6 Astra/Sol/Luna, GPT-5.6 Sol/Terra/Luna, gpt-oss-*, DeepSeek V3.x, MiniMax M2.x, Kimi K2 Thinking/K2.5, Qwen3, GLM 4.7/5, Nemotron, Mistral (vários), Grok 4.6.
- Disponibilidade por endpoint não implica disponibilidade em toda região; ver "Regional availability by models".
- Aposentadoria: cada cartão traz "EOL no sooner than" (ex.: GPT-6 Sol, lançamento 2026-09-22, EOL não antes de 2027-09-22) e período legado mínimo de 6 meses. Modelos em Legacy/Deprecated não recebem aumento de quota.
Exemplo detalhado (cartão GPT-6 Sol, docs 2026-11-04):
| Item | Valor |
|---|---|
| Contexto / saída máxima | 1.050.000 / 128.000 tokens |
| Entrada / saída | texto e imagem / texto |
| APIs no Runtime | Responses, Chat Completions, Converse, Invoke (Messages: não) |
| APIs no Mantle | Responses, Chat Completions |
Raciocínio (reasoning effort) |
none, low, medium, high, xhigh, max; padrão medium. Resumos de raciocínio na Responses. |
| Structured output | response_format.type=json_schema (Chat) ou text.format (Responses), objeto com required completo e additionalProperties:false, apenas sem streaming |
| Prompt caching | implícito e explícito (prompt_cache_options.mode=explicit, ttl=30m, prompt_cache_breakpoint), prefixo mínimo 1.024 tokens, até 4 escritas por requisição; resposta traz cached_tokens e cache_write_tokens |
| Tier de serviço | só Standard (service_tier ausente ou default) |
| Outros | não suporta document no Converse nem imagem dentro de toolResult; Guardrails só no Runtime; ferramentas server-side só no Mantle |
Regras do Thinker verificadas por AWS/chamadas: modelos GPT no Runtime rejeitam max_tokens (exigem max_completion_tokens); isso não está na doc pública (código do Thinker, verifiedAt 2026-09-28).
Claude via Messages: extended/adaptive thinking, structured outputs (output_config.format), compaction, ferramentas, visão, cache de prompt e mensagens de sistema no meio da conversa são suportados nos dois endpoints.
- Chat Completions: o Thinker pede
stream_options.include_usage(comportamento do código; a doc não detalha). Responses: eventos padrão da OpenAI;storepadrãotruecom retenção de 30 dias (respostas ficam na região que serviu); para não reter, enviarstore:false. - Uso:
cached_tokens,cache_write_tokensnos detalhes de prompt (modelos OpenAI); Claude usa os campos de cache da Messages API. Quota do Runtime queima tokens de saída com taxa específica por modelo (GPT-6 Sol: 10 para 1). - Respostas do Mantle em
stream:falsepodem vir vazias para GPT-5.x segundo o código do Thinker (proxy-response-handler.ts:783-787); não confirmado na doc.
- Valores em USD por milhão de tokens (tier Standard), cartão GPT-6 Sol:
| Opção | Entrada | Cache write | Cache read | Saída |
|---|---|---|---|---|
| Mantle in-Region / CRIS geo EUA (até 272 K) | 2,20 | 2,75 | 0,22 | 11,00 |
| CRIS global (até 272 K) | 2,00 | 2,50 | 0,20 | 10,00 |
| Mantle in-Region / CRIS geo EUA (> 272 K) | 4,40 | 5,50 | 0,44 | 16,50 |
| CRIS global (> 272 K) | 4,00 | 5,00 | 0,40 | 15,00 |
- A faixa longa vale para a requisição inteira quando a entrada passa de 272 K tokens.
- Regra geral (guia de CRIS e página de preços): CRIS global ~10% mais barato que o geográfico; sem taxa de roteamento; o preço segue a região de chamada. Tiers: Priority +75%, Flex e Batch −50% (nem todo modelo; GPT-6 Sol só Standard). Cache read do Claude Sonnet 5.5 cai 50% a partir de 2026-10-07 (página de preços).
- Preço por token igual no Runtime e no Mantle para o mesmo modelo.
- Runtime: quota por modelo e região em tokens por minuto (entrada + saída somadas, com taxa de queima de saída), mais RPM em alguns modelos (Opus 4.7/4.8 não têm RPM) e um teto diário entre modelos; a quota é compartilhada entre Converse, InvokeModel, Responses e Chat Completions.
max_tokensreserva quota. - Mantle: quotas separadas de TPM de entrada e de saída, sem RPM; reserva
entrada + max_tokens; estourou, 429; tokens lidos do cache não contam. Pode enfileirar requisições brevemente. Recomendado retry com backoff. - Erros conhecidos:
model <id> isn't supported on this route(prefixo errado no Mantle), 400 embackground=trueno Runtime, 400 em perfil de aplicação, 404 igual para resposta inexistente/de outra conta,ValidationExceptionao enviardocumentao GPT-6 Sol via Converse, 403 de entitlement quando a conta não ativou o modelo (observado pelo código,bedrock-runtime-capabilities.ts, paraclaude-haiku-5-5). Códigos de erro retentáveis exatos (429/ThrottlingException, 5xx) seguem o padrão AWS; a doc consultada não enumera (não confirmado). - Parâmetros:
service_tiersódefaultem GPT; Guardrails e prompt caching explícito têm cabeçalhos/campos próprios acima.
Estado conferido contra o código de onda3 (2026-11-04):
- Provedor:
id: 'bedrock', nome "AWS Bedrock", placeholder de chaveABSK..., tamanho mínimo 100 (packages/shared/src/providers.ts:98-109). - Seis chaves de endpoint (
packages/backend/src/routing/proxy/provider-endpoints.ts:239-287):
| Chave | Host | Caminho | Formato |
|---|---|---|---|
bedrock |
Mantle | /v1/chat/completions |
OpenAI, Authorization: Bearer, stream_options.include_usage |
bedrock-responses |
Mantle | /openai/v1/responses se openai.gpt-[5-9]…, senão /v1/responses |
Responses |
bedrock-anthropic |
Mantle | /anthropic/v1/messages |
Anthropic, x-api-key, anthropic-version: 2023-06-01 |
bedrock-runtime |
Runtime | /openai/v1/chat/completions |
OpenAI + prompt_cache_key |
bedrock-runtime-responses |
Runtime | /openai/v1/responses |
Responses |
bedrock-runtime-anthropic |
Runtime | /anthropic/v1/messages |
Anthropic |
- Escolha do endpoint (
resolveBedrockEndpointKey,provider-endpoints.ts:125-149): perfil CRIS de Claude vai ao Runtime Messages em qualquer modo; perfil CRIS catalogado vai ao Runtime na API chamada; demais IDs seguem o Mantle (OpenAI → Responses, Anthropic → Messages, resto → Chat Completions). - Região (
bedrock-region.ts): padrãous-east-1; lista fechada de 13 regiões do Mantle (:7-21); host Mantlebedrock-mantle.<r>.api.aws, Runtimebedrock-runtime.<r>.amazonaws.com, controlebedrock.<r>.amazonaws.com. Detecta região só em chave legadabedrock-api-key-(base64 comX-Amz-Credential); chaveABSKnão detecta. Override de endpoint do Mantle é validado (normalizeBedrockMantleBaseUrl). A região vem deproviderRegion(forward-endpoint-resolver.ts:143-150,model-discovery.service.ts:210). - Prefixo CRIS reconhecido:
global|us|eu|apac(bedrock-region.ts:50). - Catálogo Runtime verificado ao vivo (
bedrock-runtime-capabilities.ts, 2026-09-28):moonshotai.kimi-k3,openai.gpt-6-astra,gpt-6-sol,gpt-6-luna,gpt-5.6-luna(todos Chat + Responses; GPT exigemmax_completion_tokens). Claude em Runtime Messages (2026-10-01):claude-sonnet-5,sonnet-5-5,opus-4-7,opus-4-8,opus-5,opus-5-5,haiku-4-5-20251001-v1:0, ehaiku-5-5(ainda sem 200, só 403 de entitlement). - Parâmetros: GPT no Runtime recebe
max_completion_tokensereasoning_effort(provider-client.ts:910-917). - Descoberta (
provider-model-fetcher.service.ts:1015-1019, 1147-1193, 1237-1270):GET <mantle>/v1/modelscom bearer, junto comGET <controle>/inference-profiles?type=SYSTEM_DEFINED&maxResults=1000(perfis ACTIVE com endpoint suportado); se o Mantle voltar vazio, nada é devolvido; falha do controle preserva perfis anteriores. Bloqueio:voxtral-(:465). - Preço/metadados: sem entradas em
known-model-prices.ts; preço e nome vêm do models.dev (amazon-bedrock,models-dev-sync.service.ts:38) usando o ID da AWS (model-discovery.service.ts:735-741). Se perfis CRIS (us./global.) recebem preço (e com qual taxa) não foi verificado (não confirmado). - Cache:
cache_write_tokensé lido emstream-writer.tseanthropic-messages-adapter.ts;prompt_cache_options/prompt_cache_breakpointnão aparecem no código (cache explícito da AWS não é encaminhado de forma dedicada). - UI: assunto "Claude, GPT, Kimi, MiniMax, Nova via Amazon Bedrock" (
packages/frontend/src/services/providers.ts:194-196).
Pontos no código:
packages/shared/src/providers.tspackages/shared/src/provider-inference.tspackages/backend/src/routing/proxy/provider-endpoints.tspackages/backend/src/routing/proxy/forward-endpoint-resolver.tspackages/backend/src/routing/proxy/provider-client.tspackages/backend/src/routing/proxy/proxy-response-handler.tspackages/backend/src/routing/bedrock-region.tspackages/backend/src/routing/bedrock-runtime-capabilities.tspackages/backend/src/model-discovery/provider-model-fetcher.service.tspackages/backend/src/model-discovery/model-discovery.service.tspackages/backend/src/model-discovery/known-model-prices.tspackages/backend/src/database/models-dev-sync.service.tspackages/backend/src/routing/model.controller.tspackages/frontend/src/services/provider-utils.tspackages/frontend/src/services/providers.tspackages/frontend/src/components/ProviderIcon.tsx
Outros arquivos que citam bedrock: routing/proxy/anthropic-adapter.ts, routing/proxy/anthropic-beta.ts, routing/provider.controller.ts, routing/routing-core/provider.service.ts, model-discovery/model-capabilities.ts, routing/vertex-deployment.ts.
| ID | Severidade | Lacuna | Dono | Issue | Status |
|---|---|---|---|---|---|
| G1 | degradação | Chat Completions no Mantle usa sempre /v1, mas alguns modelos (GPT-6 Sol e outros GPT só-Mantle, como 5.4/5.5/6.1) só respondem em /openai/v1; a Responses já trata isso, a Chat não. provider-endpoints.ts:96, 239-245. Sugestão: reaproveitar BEDROCK_NAMESPACED_GPT_MODEL_RE no caminho Chat. Não testado ao vivo. |
providers | #398 | resolvida (/openai/v1/chat/completions para GPT só-Mantle; validar com chave) |
| G2 | degradação | Lista de regiões restrita às 13 do Mantle; regiões só-Runtime (us-west-1, ca-central-1, ap-southeast-1, ap-northeast-2, af-south-1, me-*, il-central-1…) e GovCloud caem em us-east-1, embora o Runtime seja o endpoint recomendado e chave longa valha só na região de origem. bedrock-region.ts:7-21. |
backend-dev | #399 | resolvida (regiões só-Runtime e GovCloud aceitas; Mantle cai em us-east-1 fora das suas 13) |
| G3 | oportunidade | Catálogo Runtime (5 modelos) e de Claude Messages (8) defasados: faltam GPT-6.1 Sol, GPT-5.6 Sol/Terra, Grok 4.6/4.7, GLM 5.3, Fable 5/5.1 etc., e o prefixo CRIS in. (e jp./au./us-gov. citados no código). Exige verificação ao vivo. bedrock-runtime-capabilities.ts, bedrock-region.ts:50. |
providers | #400 | aberta (prefixo CRIS in. aceito; o catálogo Runtime depende de verificação ao vivo com chave) |
| G4 | oportunidade | Cache de prompt explícito da AWS (prompt_cache_options, prompt_cache_breakpoint, TTL 30m) não é exposto; só prompt_cache_key no Runtime. Custo de cache_write_tokens já é lido. Sem issue (retorno incerto). |
providers | — | aberta |
| G5 | oportunidade | Preço dos perfis CRIS não é diferenciado: CRIS geo EUA e Mantle in-Region têm +10% sobre o global, e a faixa acima de 272 K tokens custa mais; o Thinker não tem tabela própria para Bedrock e depende do models.dev (não confirmado como trata us./global.). Sem issue. |
providers | — | aberta |
Pendente para conferência humana com chave real: G1 (caminho Chat no Mantle para openai.gpt-5.5/gpt-6-1-sol), G3 (modelos novos e in.), ABSK como prefixo da chave, e se GET /inference-profiles aceita a chave bearer em todas as regiões.
- 2026-11-03: esqueleto criado, sem pesquisa.
- 2026-11-04: primeira revisão completa (docs AWS lidos em 2026-11-04). Contrato escrito; "Como o Thinker implementa hoje" conferido; lacunas G1 a G5, issues #398 a #400. Prioridade para o dono de
api-anthropic: perfisanthropic.*em Runtime/Mantle ecount_tokensficaram fora deste escopo (ver issue #371 do harnessanthropic-sdk).