BEDROCK), com três paths de dispatch que cobrem o catálogo inteiro de modelos hospedados pela AWS:
- Anthropic Messages —
anthropic.*e inference profiles (global./us./eu./apac.anthropic.*). Preserva cache markers e extended-thinking. - OpenAI Chat Completions —
openai.gpt-oss-*(open-weights da OpenAI no Bedrock). - Converse API (default) — schema unificado da AWS que cobre tudo o mais: Llama, Amazon Nova, Mistral, Cohere, AI21 Jamba, DeepSeek, Stability, Writer Palmyra, Moonshot Kimi, MiniMax, Qwen, Z.AI/GLM, Google Gemma, NVIDIA Nemotron, TwelveLabs Pegasus, e qualquer provider que a AWS adicionar no futuro.
/switch --model confia 100% no que sua conta AWS retorna via ListFoundationModels + ListInferenceProfiles — sem allowlist hardcoded. Modelo novo na AWS aparece no próximo /switch --model sem precisar de release do ChatCLI.
Ideal para ambientes corporativos que já têm billing, compliance e controle de acesso via AWS — sem precisar de API keys das provedoras originais.
Por que AWS Bedrock?
Sem API key por provider
~/.aws/credentials, AWS_PROFILE). Uma única identidade pra todos os modelos.Billing e compliance AWS
Catálogo completo
VPC endpoints
AWS_ENDPOINT_URL_BEDROCK_RUNTIME.Auto-detecção de família
Embeddings nativos
Configuração
O provedor é detectado automaticamente quando o ChatCLI encontra credenciais AWS válidas (não apenas a existência de arquivos):- Credenciais estáticas em env:
AWS_ACCESS_KEY_ID - Profile selecionado:
AWS_PROFILE(via env var ou.envfile) - Arquivo
~/.aws/credentialscom ao menos umaws_access_key_idpreenchido - AWS SSO: perfil SSO em
~/.aws/config(detectasso_session,sso_start_url,sso_account_id) - Assume-role / credential_process: perfis com
role_arnoucredential_processem~/.aws/config - Token cache SSO: presença de arquivos em
~/.aws/sso/cache/(indicandoaws sso loginanterior) - Web Identity Token (EKS IRSA):
AWS_WEB_IDENTITY_TOKEN_FILE - Container Credentials (ECS):
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI/_FULL_URI
Opção 1: ~/.aws/credentials (credenciais estáticas)
Se você já usa AWS CLI, basta ter um profile configurado:
Opção 2: AWS SSO (IAM Identity Center)
Se sua empresa usa AWS SSO, configure o profile no~/.aws/config:
~/.aws/config (pelas chaves sso_session, sso_start_url, sso_account_id). Se o token SSO expirar, o erro será claro (SSOTokenProviderError) — basta executar aws sso login novamente.Importante: o AWS SDK não sabe qual profile está “logado”. Você precisa indicar o profile via AWS_PROFILE (env, .env, ou flag). Se seu profile SSO se chama default, ele é usado automaticamente sem AWS_PROFILE.Opção 3: Environment variables (credenciais estáticas)
Opção 4: IAM Role (EC2/ECS/EKS)
Em ambientes AWS nativos, não precisa configurar nada — o SDK pega a role automaticamente pelo IMDSv2 / webidentity. Só precisa garantir que a role tem as permissões IAM abaixo.AWS_CONTAINER_CREDENTIALS_*, AWS_WEB_IDENTITY_TOKEN_FILE, ECS_CONTAINER_METADATA_URI*).Para forçar o comportamento, use:AWS_EC2_METADATA_DISABLED=true— desabilita IMDS explicitamenteCHATCLI_BEDROCK_ENABLE_IMDS=1— força habilitar IMDS (útil em EC2 sem as env vars padrão)
Permissões IAM
Permissões mínimas para invocar e listar modelos. A actionbedrock:InvokeModel cobre tanto InvokeModel (Anthropic/OpenAI) quanto Converse (todo o resto):
Bedrock Console → Model access → Request access.
Famílias de modelos e seleção de schema
O Bedrock usa schemas diferentes dependendo do modelo. O ChatCLI tem três paths e detecta automaticamente qual usar pelo prefixo do model id:| Prefixo do model id | Família | Schema | Por quê |
|---|---|---|---|
anthropic.*, global./us./eu./apac.anthropic.* | Anthropic Messages | anthropic_version, messages, system (com cache_control) | Preserva cache breakpoints, extended-thinking budget, todos os knobs Claude |
openai.*, us.openai.*, etc. | OpenAI Chat Completions | messages, max_completion_tokens | Schema estável e amplamente coberto pra GPT-OSS |
| Qualquer outro (Llama, Nova, Mistral, Cohere, AI21, DeepSeek, Stability, Writer, Moonshot, MiniMax, Qwen, Z.AI, Gemma, Nemotron, TwelveLabs, …) | Converse API (default) | messages, system, inferenceConfig | Schema unificado da AWS — uma implementação cobre todos os providers que não exigem features específicas |
Override manual
Se quiser forçar uma família independente do prefixo (ex.: testar Converse num modelo Anthropic), use a env var:anthropic / claude, openai / gpt, converse / auto (case-insensitive). A env var tem precedência sobre a detecção por prefixo.
/switch --model lista qualquer text-output model com inference on-demand que sua conta tem acesso — Kimi K2.6, GLM 4.7, Qwen3 Coder Next, Nemotron Nano 3, qualquer modelo novo que a AWS adicionar — sem precisar de release nosso. Se um ID raro não casar com Converse, o ChatCLI retorna mensagem amigável apontando o caminho.Inference Profiles vs. Model IDs
Esse é o detalhe mais importante do Bedrock com Claude. Modelos Anthropic modernos (3.7, 4.x, 4.5, 4.6) NÃO aceitam invocação on-demand direto pelo ID base. Se você tentar, recebe:| Prefixo | Significado |
|---|---|
global.* | Global — tier mais novo, disponibilidade mundial (recomendado) |
us.* | Cross-region EUA (us-east-1, us-east-2, us-west-2) |
eu.* | Cross-region Europa |
apac.* | Cross-region Ásia-Pacífico |
global.anthropic.claude-sonnet-4-5-20250929-v1:0). Os modelos Claude 3 e 3.5 ainda aceitam invocação direta pelo ID base e também estão no catálogo.Listagem de Modelos
O/switch --model consulta duas fontes ao vivo e as mescla com o catálogo estático:
bedrock:ListFoundationModelscomByOutputModality: TEXT— modelos de texto disponíveis na região.bedrock:ListInferenceProfiles— profiles regionais/global (paginado).
- Modality TEXT (server-side) — corta embedding-only e image-only.
InferenceTypesSupportedcontémON_DEMAND— corta IDs base que só são invocáveis via inference profile (Claude 3.7+/4.x e cross-region-only de outros providers). Esses modelos aparecem normalmente viaListInferenceProfilescom prefixoglobal./us./eu./apac..
[api] são os que sua conta realmente pode invocar naquela região. Os [catalog] são registros estáticos que podem ou não estar habilitados.
Proxy Corporativo e TLS Privado
Em ambientes corporativos com proxy interceptando TLS com uma CA privada, você pode ver:| Variável | Descrição |
|---|---|
CHATCLI_BEDROCK_CA_BUNDLE | Caminho para um bundle PEM com a CA corporativa. Mescla no pool do sistema e usa como RootCAs. Tem precedência sobre AWS_CA_BUNDLE. |
CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY | true desabilita verificação TLS por completo (equivalente ao NODE_TLS_REJECT_UNAUTHORIZED=0 do Node). Inseguro — use só pra confirmar que é problema de TLS. |
CHATCLI_CA_BUNDLE / CHATCLI_TLS_INSECURE_SKIP_VERIFY — valem para todas as conexões de saída (LLM providers, web tools, gateway, MCP), e o Bedrock as herda como fallback. As específicas do Bedrock têm precedência quando ambas estão definidas. Veja Confiança TLS Global.VPC Endpoints / endpoints privados
Se a empresa usa VPC endpoint para Bedrock:Variáveis de Ambiente
| Variável | Descrição | Padrão |
|---|---|---|
BEDROCK_PROVIDER | Override manual do schema: anthropic / claude, openai / gpt, converse / auto | auto-detect |
BEDROCK_TEMPERATURE | Temperature (usada por OpenAI e Converse paths) | — |
BEDROCK_TOP_P | Top-p sampling (usado pelo Converse path) | — |
BEDROCK_REGION | Região AWS (prioridade sobre AWS_REGION) | — |
AWS_REGION | Região AWS (fallback) | — |
AWS_PROFILE | Profile em ~/.aws/credentials ou ~/.aws/config (SSO, assume-role). Pode ser definido no .env. | — |
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN | Credenciais estáticas | — |
AWS_CA_BUNDLE | Bundle PEM lido nativamente pelo SDK v2 | — |
AWS_ENDPOINT_URL_BEDROCK_RUNTIME | Override de endpoint do Bedrock Runtime | — |
AWS_ENDPOINT_URL_BEDROCK | Override de endpoint do Bedrock (control plane) | — |
AWS_EC2_METADATA_DISABLED | true desabilita IMDS (169.254.169.254) explicitamente | — |
CHATCLI_BEDROCK_ENABLE_IMDS | 1/true força habilitar o probe IMDS em máquinas não-EC2 | false |
BEDROCK_MAX_TOKENS | Limite de tokens de saída | Do catálogo |
ANTHROPIC_MAX_TOKENS | Alternativa compartilhada com o provedor Anthropic direto | — |
CHATCLI_BEDROCK_CA_BUNDLE | Bundle PEM específico do Bedrock (precede AWS_CA_BUNDLE) | — |
CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY | true desabilita verificação TLS (inseguro) | false |
HTTPS_PROXY / HTTP_PROXY / NO_PROXY | Proxy HTTP padrão Go/SDK | — |
global.anthropic.claude-sonnet-4-5-20250929-v1:0
Default region: us-east-1
Todas essas vars aparecem no /config providers (chat) e /config quality (embeddings). Veja Variáveis de Ambiente pra referência completa.
Observabilidade — endpoint URL nos logs
A partir desta versão, o ChatCLI loga o endpoint URL do Bedrock em todas as requests — paridade com Anthropic, OpenAI e Copilot. Útil pra debugar problemas de credencial, região, VPC endpoint ou proxy. No init (uma vez por sessão):https://bedrock-runtime.<region>.amazonaws.com). Se você definiu AWS_ENDPOINT_URL_BEDROCK_RUNTIME (VPC endpoint), o SDK usa o override — o log mostra a URL canônica, mas a request real vai pro endpoint customizado.
Arquitetura
A construção dobedrockruntime.Client está num helper exportado (bedrock.LoadBedrockRuntime) compartilhado entre o chat client e o provider de embeddings — single source of truth pra config AWS. A autenticação é SigV4, feita transparentemente pelo SDK. O HTTP client pode ser sobrescrito pelo ChatCLI quando CHATCLI_BEDROCK_CA_BUNDLE ou CHATCLI_BEDROCK_INSECURE_SKIP_VERIFY estão definidos (via awshttp.BuildableClient).
Diferença entre Bedrock e Anthropic Direto
| Aspecto | BEDROCK | CLAUDEAI (Anthropic direto) |
|---|---|---|
| Auth | AWS credentials chain (IAM, profile) | API key (sk-ant-...) ou OAuth |
| Endpoint | bedrock-runtime.<region>.amazonaws.com | api.anthropic.com |
| Billing | Conta AWS (console Billing + CloudTrail) | Conta Anthropic (console.anthropic.com) |
| Modelos | Catálogo Bedrock inteiro (Claude, OpenAI, Llama, Nova, Mistral, Cohere, AI21, DeepSeek, Moonshot, MiniMax, Qwen, Z.AI, Gemma, Nemotron, TwelveLabs) | Todos Claude, com as versões mais recentes primeiro |
| Streaming | Não implementado nesta versão (usa InvokeModel / Converse) | Suportado |
| OAuth/1M context | N/A | Suportado (ANTHROPIC_1MTOKENS_SONNET) |
| VPC privado | Sim (via AWS_ENDPOINT_URL_*) | Não |
| Compliance | Inherits from AWS (SOC2, HIPAA, etc.) | Inherits from Anthropic |
| Embeddings | Sim — Titan v1/v2 + Cohere v3 (mesma cadeia AWS) | Não disponível |
Troubleshooting
bedrock: model X requires an inference profile
bedrock: model X requires an inference profile
/switch --model filtra automaticamente IDs base que exigem profile — então isso só aparece se você digitar um ID manualmente. O filtro usa o campo InferenceTypesSupported do ListFoundationModels: modelo sem ON_DEMAND é suprimido da listagem.AccessDeniedException: You don't have access to the model
AccessDeniedException: You don't have access to the model
bedrock:InvokeModel no ARN do modelo + do inference profile.NoCredentialProviders / unable to load SDK config
NoCredentialProviders / unable to load SDK config
aws configure, aws sso login, ou exporte as env vars.no EC2 IMDS role found / dial tcp 169.254.169.254:80: connect: host is down
no EC2 IMDS role found / dial tcp 169.254.169.254:80: connect: host is down
SSOTokenProviderError / expired token (SSO)
SSOTokenProviderError / expired token (SSO)
AWS_PROFILE definido (env, .env, ou o profile se chamar default).x509: certificate signed by unknown authority
x509: certificate signed by unknown authority
ThrottlingException / ServiceQuotaExceededException
ThrottlingException / ServiceQuotaExceededException
- Use um inference profile
global.*(roteia pra qualquer região disponível) - Use Provisioned Throughput (precisa ser configurado no console Bedrock)
- Aumente os limites via Service Quotas na AWS
Embeddings via Bedrock
O ChatCLI também usa Bedrock como provider de embeddings (HyDE phase 3b, vector retrieval). Ativação:| Model ID prefix | Família | Dimensões |
|---|---|---|
amazon.titan-embed-text-v2* | Titan v2 | 256 / 512 / 1024 (configurável via CHATCLI_EMBED_DIMENSIONS) |
amazon.titan-embed-text-v1 | Titan v1 | 1536 (fixo) |
cohere.embed-english-v3 / cohere.embed-multilingual-v3 | Cohere v3 | 1024 (fixo) |
BEDROCK_REGION / AWS_REGION / AWS_PROFILE / ~/.aws/credentials etc. Veja RAG + HyDE para arquitetura completa do retrieval.