Pular para o conteúdo

Proxy de Traducao

O proxy de traducao e o nucleo do Claudex. Ele se posiciona entre o Claude Code e seus provedores de IA, convertendo de forma transparente entre a API Anthropic Messages e a API OpenAI Chat Completions (ou API Responses).

Claude Code → requisicao da API Anthropic Messages
└── Proxy Claudex (127.0.0.1:13456)
├── Provedor DirectAnthropic → encaminhar com headers
├── Provedor OpenAICompatible
│ ├── Traduzir requisicao: Anthropic → OpenAI Chat Completions
│ ├── Aplicar query_params, strip_params, custom_headers
│ ├── Encaminhar para o provedor
│ └── Traduzir resposta: OpenAI → Anthropic
└── Provedor OpenAIResponses
├── Traduzir requisicao: Anthropic → API OpenAI Responses
├── Encaminhar para o provedor
└── Traduzir resposta: Responses → Anthropic

O Claudex usa um trait ProviderAdapter para lidar com diferencas entre APIs de provedores. Tres adaptadores sao implementados:

AdaptadorTraducaoUsado Por
DirectAnthropicNenhuma (passthrough)Anthropic, MiniMax, Vertex AI
ChatCompletionsTraducao completa Anthropic ↔ OpenAIGrok, OpenAI, DeepSeek, Kimi, GLM, OpenRouter, Groq, Mistral, Together AI, Perplexity, Cerebras, Azure OpenAI, GitHub Copilot, GitLab Duo, Ollama, vLLM, LM Studio
ResponsesAnthropic ↔ API OpenAI ResponsesAssinaturas ChatGPT/Codex
AnthropicOpenAI
Campo systemMensagem de sistema no array messages
Blocos messages[].content (text, image, tool_use, tool_result)messages[].content + tool_calls
Array tools (JSON Schema com input_schema)Array tools (formato function com parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (limitado pela configuracao max_tokens do profile, se definida)
temperature, top_pMapeamento direto (removidos se strip_params corresponder)
OpenAIAnthropic
choices[0].message.contentBlocos content (type: text)
choices[0].message.tool_callsBlocos content (type: tool_use)
finish_reason: stopstop_reason: end_turn
finish_reason: tool_callsstop_reason: tool_use
usage.prompt_tokens / completion_tokensusage.input_tokens / output_tokens

O Claude Code pode gerar nomes de ferramentas com mais de 64 caracteres (ex: mcp__server-name__very-long-tool-name-that-exceeds-the-limit). O OpenAI e muitos provedores impoem um limite de 64 caracteres.

O Claudex automaticamente:

  1. Trunca nomes que excedem 64 caracteres nas requisicoes de saida
  2. Cria uma tabela de mapeamento de nomes truncados → originais
  3. Restaura os nomes originais nas respostas do provedor

Essa traducao de ida e volta e totalmente transparente.

O Claudex suporta completamente SSE (Server-Sent Events) em streaming, traduzindo chunks do stream OpenAI em eventos do stream Anthropic em tempo real:

OpenAI SSEAnthropic SSE
Primeiro chunkmessage_start + content_block_start
choices[0].delta.contentcontent_block_delta (text_delta)
choices[0].delta.tool_callscontent_block_delta (input_json_delta)
finish_reason presentecontent_block_stop + message_delta + message_stop

O tradutor de streaming mantem uma maquina de estados para tratar corretamente o acumulo de chamadas de ferramentas e os limites de blocos de conteudo.

O Azure OpenAI usa um esquema diferente de autenticacao e URL:

  • Autenticacao: header api-key em vez de Authorization: Bearer
  • Formato da URL: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • Versao da API: obrigatoria via query_params

O Claudex detecta automaticamente o Azure verificando se a base_url contem openai.azure.com e ajusta a autenticacao conforme necessario.

ProvedorTipoURL Base
AnthropicDirectAnthropichttps://api.anthropic.com
MiniMaxDirectAnthropichttps://api.minimax.io/anthropic
Google Vertex AIDirectAnthropichttps://REGION-aiplatform.googleapis.com/v1/projects/...
OpenRouterOpenAICompatiblehttps://openrouter.ai/api/v1
Grok (xAI)OpenAICompatiblehttps://api.x.ai/v1
OpenAIOpenAICompatiblehttps://api.openai.com/v1
DeepSeekOpenAICompatiblehttps://api.deepseek.com
Kimi/MoonshotOpenAICompatiblehttps://api.moonshot.ai/v1
GLM (Zhipu)OpenAICompatiblehttps://api.z.ai/api/paas/v4
GroqOpenAICompatiblehttps://api.groq.com/openai/v1
Mistral AIOpenAICompatiblehttps://api.mistral.ai/v1
Together AIOpenAICompatiblehttps://api.together.xyz/v1
PerplexityOpenAICompatiblehttps://api.perplexity.ai
CerebrasOpenAICompatiblehttps://api.cerebras.ai/v1
Azure OpenAIOpenAICompatiblehttps://{resource}.openai.azure.com/...
GitHub CopilotOpenAICompatiblehttps://api.githubcopilot.com
GitLab DuoOpenAICompatiblehttps://gitlab.com/api/v4/ai/llm/proxy
OllamaOpenAICompatiblehttp://localhost:11434/v1
vLLMOpenAICompatiblehttp://localhost:8000/v1
LM StudioOpenAICompatiblehttp://localhost:1234/v1
Assinatura ChatGPT/CodexOpenAIResponseshttps://chatgpt.com/backend-api/codex

O proxy expoe um endpoint /v1/models que lista todos os profiles habilitados. Cada entrada inclui campos personalizados:

  • x-claudex-profile: nome do profile
  • x-claudex-provider: tipo do provedor (anthropic, openai-compatible, openai-responses)

O Claude Code consulta este endpoint para descobrir modelos disponiveis.

Terminal window
# Iniciar proxy como daemon
claudex proxy start -d
# Verificar status do proxy
claudex proxy status
# Parar daemon do proxy
claudex proxy stop
# Iniciar em uma porta personalizada
claudex proxy start -p 8080

Quando voce executa claudex run <profile>, o proxy e iniciado automaticamente em segundo plano se ainda nao estiver em execucao.