Skip to main content

Responses API ↔ Chat Completions translation bridge for Codex CLI

Project description

codex-relay

A lightweight Rust proxy that translates the OpenAI Responses API (used by Codex CLI) into the Chat Completions API, letting Codex work with any OpenAI-compatible provider — DeepSeek, Kimi, Qwen, Mistral, Groq, xAI, OpenRouter, and more.

Why

Codex CLI speaks the OpenAI Responses API, which is an OpenAI-proprietary stateful protocol. Every other provider exposes the standard Chat Completions API. codex-relay sits between Codex and your chosen provider, translating on the fly — no code changes to Codex required.

Install

# From PyPI — prebuilt binary for your platform
pip install codex-relay

# From crates.io
cargo install codex-relay

Quick start

1. Start the relay

CODEX_RELAY_UPSTREAM=https://api.deepseek.com/v1 \
CODEX_RELAY_API_KEY=$DEEPSEEK_API_KEY \
CODEX_RELAY_PORT=4446 \
codex-relay

2. Configure Codex (~/.codex/config.toml)

model = "deepseek-chat"
model_provider = "deepseek-relay"

[model_providers.deepseek-relay]
name = "DeepSeek"
api_base_url = "http://127.0.0.1:4446/v1"
env_key = "DEEPSEEK_API_KEY"

3. Use Codex normally — it routes through the relay transparently.

Supported providers

Provider Base URL Suggested port
DeepSeek https://api.deepseek.com/v1 4446
Kimi (Moonshot) https://api.moonshot.cn/v1 4447
Qwen https://dashscope.aliyuncs.com/compatible-mode/v1 4448
Mistral https://api.mistral.ai/v1 4449
Groq https://api.groq.com/openai/v1 4450
xAI https://api.x.ai/v1 4451
OpenRouter https://openrouter.ai/api/v1 4452

Any OpenAI-compatible endpoint works.

Features

  • Streaming — full SSE streaming with correct event sequencing
  • Tool calls — accumulates streaming deltas and emits structured function_call items
  • Parallel tool calls — consecutive function_call input items merged into one assistant message
  • Reasoning models — preserves reasoning_content across turns (Kimi k2.6, DeepSeek-R1)
  • Model catalog — proxies /v1/models from the upstream provider

Configuration

Variable Default Description
CODEX_RELAY_PORT 4444 Port to listen on
CODEX_RELAY_UPSTREAM https://openrouter.ai/api/v1 Upstream Chat Completions base URL
CODEX_RELAY_API_KEY (empty) API key forwarded to upstream
RUST_LOG codex_relay=info Log verbosity

Python API

from codex_relay import start

proc = start(port=4446, upstream="https://api.deepseek.com/v1", api_key="sk-...")
# ... use Codex ...
proc.terminate()

Disclaimer

This project is not affiliated with, endorsed by, or sponsored by OpenAI. "Codex" refers to OpenAI Codex CLI, an open-source project licensed under Apache-2.0. codex-relay is an independent, community-built translation proxy.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

codex_relay-0.1.2-py3-none-win_amd64.whl (2.5 MB view details)

Uploaded Python 3Windows x86-64

codex_relay-0.1.2-py3-none-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

codex_relay-0.1.2-py3-none-manylinux_2_28_aarch64.whl (3.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

codex_relay-0.1.2-py3-none-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

codex_relay-0.1.2-py3-none-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file codex_relay-0.1.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: codex_relay-0.1.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 2.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for codex_relay-0.1.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 3c2ecbdb1bbf174153cd3eca9f8d0146de2953624811b226934223e1ed140409
MD5 08bd2685254ddd1b29c18e5e6d9274e8
BLAKE2b-256 bdfd89673bcdb85d95f68cd5490e3e050c95787f5291f27c3f3d643a0ff61d2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex_relay-0.1.2-py3-none-win_amd64.whl:

Publisher: publish.yml on MetaFARS/codex-relay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codex_relay-0.1.2-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for codex_relay-0.1.2-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4c334aecd0e12287304501b88d54844a3856f2777088e14b3f0624aa0b9672f7
MD5 7ed04a1ed631b803f63fcd838196760b
BLAKE2b-256 27aefc27c829dc550ea704f374b3c9f578e5f5ef41936a86b0e5d60f3d2266b2

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex_relay-0.1.2-py3-none-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on MetaFARS/codex-relay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codex_relay-0.1.2-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for codex_relay-0.1.2-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4c73dc43f215741f69c5c4c4c8e702aefcbc772711f23fad97fe5d5d7b5901bd
MD5 25c4c054962fe53a74e2c86978baaf19
BLAKE2b-256 34b064e990031d7c2dff9f641c8748b4d646378f413326e92a8423ded228d5f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex_relay-0.1.2-py3-none-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on MetaFARS/codex-relay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codex_relay-0.1.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for codex_relay-0.1.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c92d29e162863fea8a1d8bf092c96fc1339fa032c4a85a754b2c2527a60ec9f
MD5 2a89a5bfcdb7bd8b6247699661106047
BLAKE2b-256 2120ec085978acd929d44d67ee1e2d6f140a84085b1b19a507c006a01260eeda

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex_relay-0.1.2-py3-none-macosx_11_0_arm64.whl:

Publisher: publish.yml on MetaFARS/codex-relay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file codex_relay-0.1.2-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for codex_relay-0.1.2-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 642aee8a21d5b471502432bfbd3e3a64b5d04341c0d50b77a9f0f776371b5524
MD5 ff75551ab9e0b4b5449118c8fdae3ffd
BLAKE2b-256 e846c1da618d086a949fbd07acaf39a636faade29e69a0be179e93763b43e6f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for codex_relay-0.1.2-py3-none-macosx_10_12_x86_64.whl:

Publisher: publish.yml on MetaFARS/codex-relay

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page