Skip to content

ahtcfg24/codex-shift

Repository files navigation

codex-shift

让 Codex 接入任意支持 chat/completions 协议及 responses 协议的 llm api

快速开始 | 用户手册 | 配置说明 | Codex 集成 | FAQ


为什么需要 codex-shift

Codex 使用 Responses 协议工作,但很多模型供应商仍以 Chat Completions 或自定义 Responses 网关提供服务。codex-shift 提供一个本地适配层,把这些上游统一成 Codex 可直接使用的 Responses 入口,并补齐模型目录、上下文窗口和 provider 路由能力。

它支持这些功能:

  • responses 协议转换:将 chat/completions 协议和 responses 协议的 api 统一转换为 POST /v1/responses
  • 多 Provider 路由:同一配置中管理 DeepSeek、Qwen、MiMo、内部网关等上游,并按模型名自动选择 provider。
  • Codex 模型目录:通过实现 responses 协议的 /models接口 暴露 Codex 兼容的 ModelInfo,让自定义模型获得真实上下文窗口,比如开启 1M 上下文窗口,而不是 codex 内置的 272k。
  • 本地热管理:内置本地控制台,通过 /admin 进入控制台,图形界面化增删 provider、调整权重、维护模型列表与上下文窗口并保存配置,不需要重启进程。
  • 错误语义统一:上游超时、非法 JSON、API 错误会转换为 Responses 风格错误响应。
  • 纯本地转换:轻量,简洁的本地转换,不做路由和转换以外的多余动作,性能几乎无损。
  • Provider 内模型映射:例如对外暴露 gpt-5.5,但在某个 provider 内部实际发往 mimo-v2.5-prodeepseek-v4-pro

核心能力

协议转换与透传

  • chat_completions 出站:将 OpenAI Responses 请求转换为 Chat Completions,并把响应转换回 Responses。
  • responses 出站:上游同为 Responses 协议时进入全透传模式,仅注入 API Key,并保留 /models 上下文代理能力。
  • 支持流式与非流式请求,流式 SSE 会转换为 Responses 事件序列。

路由与模型目录

  • models[].mapped_model 支持在每个 provider 内把入站模型名映射为上游模型名。
  • 多个 provider 声明同一模型时,按 weight 做加权选择。
  • /models 基于内置 Codex ModelInfo 模板克隆条目,只覆盖 slug 与上下文窗口等元数据。

工具与推理参数

  • 支持 function tool 双向映射,包含 Codex namespace 展平与回程还原。
  • Chat 出站可按 provider 配置透传 web_search
  • reasoning.effort 会在 Chat 出站时映射为 reasoning_effort,Responses 透传时保持原样。

快速开始

一键启动

git clone git@github.com:ahtcfg24/codex-shift.git
cd codex-shift

cp .env.example .env
$EDITOR .env

./start.sh

start.sh 会自动准备虚拟环境、安装依赖、复制 config.yaml、加载项目 .env、处理端口占用,并默认通过系统 service 启动服务。macOS 使用 LaunchAgent,重启后用户登录即自动拉起;Linux 使用 systemd user service,并尝试启用 linger 以支持重启后自动启动。启动完成后访问 GET /health 验证服务状态。

常用命令

./start.sh                    # 启动/重启 service 并启用自启动
./start.sh --log-level debug  # 用 debug 日志参数启动/重启 service
./start.sh status             # 查看 service 运行状态
./start.sh restart            # 重启 service
./start.sh stop               # 停止当前 service 实例,自启动配置保留

默认监听地址来自 config.yamlserver.hostserver.port。示例配置使用 127.0.0.1:8080,本地控制台地址为:

http://127.0.0.1:8080/admin

如果 start.sh 因端口占用自动选择了新端口,请使用启动输出中的实际端口访问控制台。

最小请求示例

curl http://127.0.0.1:8080/v1/responses \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "gpt-5.5",
    "input": [{"role": "user", "content": "Hello!"}],
    "stream": false
  }'

文档导航

文档 内容
用户手册 从安装、配置到运行维护的完整目录
软件介绍 项目定位、核心概念与工作流程
安装与启动 环境要求、启动脚本、健康检查
Provider 配置 config.yaml 结构、字段说明与路由规则
API 端点 /v1/responses/models/health/admin
Codex 集成 让 Codex 读取本代理的模型目录与上下文窗口
运行维护 控制台、日志、端口与排错
FAQ 常见问题、限制与安全提示

项目结构

codex_shift/
├── codex_shift/              # FastAPI 服务、配置加载、协议转换与上游转发
├── tests/                    # 单元测试与协议转换测试
├── docs/user-manual/zh/      # 中文用户手册
├── config.example.yaml       # 配置示例
├── .env.example              # 环境变量示例
└── start.sh                  # service 启动与自启动脚本

开发与测试

python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
pip install pytest
pytest

开发配置请从 config.example.yaml 复制为 config.yaml,真实 API Key 建议写入 .envconfig.yaml.env 已在 .gitignore 中排除,请不要提交真实密钥。

贡献

欢迎通过 Issue 或 Pull Request 改进文档、协议转换兼容性、测试覆盖和 provider 示例。详细流程见 CONTRIBUTING.md。提交前请确保:

  • 不提交真实 API Key、内部域名或敏感配置。
  • 新增协议行为时同步更新用户手册与测试。
  • 文档中的命令、路径和端点已在本仓库中验证。

License

Apache-2.0

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors