Saltearse al contenido

Proxy de traduccion

El proxy de traduccion es el nucleo de Claudex. Se situa entre Claude Code y tus proveedores de IA, convirtiendo de forma transparente entre la API de Mensajes de Anthropic y la API de Chat Completions de OpenAI (o la API de Responses).

Claude Code → Anthropic Messages API request
└── Claudex Proxy (127.0.0.1:13456)
├── DirectAnthropic provider → forward with headers
├── OpenAICompatible provider
│ ├── Translate request: Anthropic → OpenAI Chat Completions
│ ├── Apply query_params, strip_params, custom_headers
│ ├── Forward to provider
│ └── Translate response: OpenAI → Anthropic
└── OpenAIResponses provider
├── Translate request: Anthropic → OpenAI Responses API
├── Forward to provider
└── Translate response: Responses → Anthropic

Claudex usa un trait ProviderAdapter para gestionar las diferencias entre las APIs de los proveedores. Se implementan tres adaptadores:

AdaptadorTraduccionUsado por
DirectAnthropicNinguna (passthrough)Anthropic, MiniMax, Vertex AI
ChatCompletionsTraduccion completa Anthropic a OpenAIGrok, OpenAI, DeepSeek, Kimi, GLM, OpenRouter, Groq, Mistral, Together AI, Perplexity, Cerebras, Azure OpenAI, GitHub Copilot, GitLab Duo, Ollama, vLLM, LM Studio
ResponsesAnthropic a API de Responses de OpenAISuscripciones ChatGPT/Codex

Traduccion de solicitudes (Anthropic a OpenAI)

Sección titulada «Traduccion de solicitudes (Anthropic a OpenAI)»
AnthropicOpenAI
Campo systemMensaje de sistema en el array messages
Bloques messages[].content (text, image, tool_use, tool_result)messages[].content + tool_calls
Array tools (JSON Schema con input_schema)Array tools (formato funcion con parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (limitado por el ajuste max_tokens del perfil si se establece)
temperature, top_pMapeo directo (eliminados si strip_params coincide)

Traduccion de respuestas (OpenAI a Anthropic)

Sección titulada «Traduccion de respuestas (OpenAI a Anthropic)»
OpenAIAnthropic
choices[0].message.contentBloques content (type: text)
choices[0].message.tool_callsBloques 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

Claude Code puede generar nombres de herramientas que superan 64 caracteres (por ejemplo, mcp__server-name__very-long-tool-name-that-exceeds-the-limit). OpenAI y muchos proveedores imponen un limite de 64 caracteres.

Claudex automaticamente:

  1. Trunca nombres que superan 64 caracteres en las solicitudes salientes
  2. Construye una tabla de mapeo de nombres truncados a nombres originales
  3. Restaura los nombres originales en las respuestas del proveedor

Este viaje de ida y vuelta es completamente transparente.

Claudex soporta completamente el streaming SSE (Server-Sent Events), traduciendo fragmentos del stream de OpenAI a eventos del stream de Anthropic en tiempo real:

OpenAI SSEAnthropic SSE
Primer fragmentomessage_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

El traductor de streaming mantiene una maquina de estados para gestionar correctamente la acumulacion de llamadas a herramientas y los limites de bloques de contenido.

Azure OpenAI usa un esquema diferente de autenticacion y URLs:

  • Autenticacion: cabecera api-key en lugar de Authorization: Bearer
  • Formato de URL: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • Version de API: obligatoria via query_params

Claudex detecta automaticamente Azure comprobando si base_url contiene openai.azure.com y ajusta la autenticacion correspondentemente.

ProveedorTipoURL 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
ChatGPT/Codex subOpenAIResponseshttps://chatgpt.com/backend-api/codex

El proxy expone un endpoint /v1/models que lista todos los perfiles habilitados. Cada entrada incluye campos personalizados:

  • x-claudex-profile: nombre del perfil
  • x-claudex-provider: tipo de proveedor (anthropic, openai-compatible, openai-responses)

Claude Code consulta este endpoint para descubrir los modelos disponibles.

Ventana de terminal
# Iniciar el proxy como daemon
claudex proxy start -d
# Comprobar el estado del proxy
claudex proxy status
# Detener el daemon del proxy
claudex proxy stop
# Iniciar en un puerto personalizado
claudex proxy start -p 8080

Cuando ejecutas claudex run <profile>, el proxy se inicia automaticamente en segundo plano si no esta ya en ejecucion.