sub2api使用5.5进行compact步骤
- 内容介绍
- 文章标签
- 相关推荐
根据GPT5.5在触发上下文压缩的时候报错404了,这个是OpenAI上游的问题还是sub2的问题呢? · Issue #1865 · Wei-Shaw/sub2api · GitHub 这个issue的评论,把codex_cli_rs/0.104.0改成codex_cli_rs/0.124.0 及以上可以修复使用5.5进行compact报404找不到模型的问题。让GPT写了以下脚本进行一键修复。
image1188×497 24.1 KB
如果你是通过脚本安装的sub2api可以尝试一下这个办法
修复完自己测试是可以用5.5进行compact的
e4b134a761c29838df3f50aa8a238fac573×216 2.92 KB
# 安装 strings 所需工具,如果已经有会跳过
if ! command -v strings >/dev/null 2>&1; then
if command -v apt >/dev/null 2>&1; then
sudo apt update
sudo apt install -y binutils
elif command -v yum >/dev/null 2>&1; then
sudo yum install -y binutils
fi
fi
# 创建 Sub2API Codex UA/version 自动补丁脚本
sudo tee /usr/local/sbin/sub2api-patch-codex-ua.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
BIN="${1:-/opt/sub2api/sub2api}"
FROM_UA="codex_cli_rs/0.104.0"
TO_UA="${SUB2API_CODEX_UA:-codex_cli_rs/0.125.0}"
FROM_VER="0.104.0"
TO_VER="${SUB2API_CODEX_VERSION:-0.125.0}"
if [ ! -f "$BIN" ]; then
echo "[sub2api-patch] binary not found: $BIN"
exit 0
fi
if [ "${#FROM_UA}" -ne "${#TO_UA}" ]; then
echo "[sub2api-patch] ERROR: UA replacement must have same length"
echo "[sub2api-patch] FROM=$FROM_UA len=${#FROM_UA}"
echo "[sub2api-patch] TO=$TO_UA len=${#TO_UA}"
exit 1
fi
if [ "${#FROM_VER}" -ne "${#TO_VER}" ]; then
echo "[sub2api-patch] ERROR: version replacement must have same length"
echo "[sub2api-patch] FROM=$FROM_VER len=${#FROM_VER}"
echo "[sub2api-patch] TO=$TO_VER len=${#TO_VER}"
exit 1
fi
python3 - "$BIN" "$FROM_UA" "$TO_UA" "$FROM_VER" "$TO_VER" <<'PY'
import os
import sys
import time
from pathlib import Path
bin_path = Path(sys.argv[1])
from_ua = sys.argv[2].encode()
to_ua = sys.argv[3].encode()
from_ver = sys.argv[4].encode()
to_ver = sys.argv[5].encode()
data = bin_path.read_bytes()
old_ua_count = data.count(from_ua)
old_ver_count = data.count(from_ver)
new_ua_count = data.count(to_ua)
if old_ua_count == 0 and old_ver_count == 0:
if new_ua_count > 0:
print(f"[sub2api-patch] already patched: {bin_path}")
else:
print(f"[sub2api-patch] old markers not found; upstream may already use another version: {bin_path}")
sys.exit(0)
backup = bin_path.with_name(
bin_path.name + ".backup.before-codex-ua-patch." + time.strftime("%Y%m%d%H%M%S")
)
backup.write_bytes(data)
patched = data.replace(from_ua, to_ua)
patched = patched.replace(from_ver, to_ver)
st = bin_path.stat()
tmp = bin_path.with_name(bin_path.name + ".patched.tmp")
tmp.write_bytes(patched)
os.chmod(tmp, st.st_mode)
os.replace(tmp, bin_path)
print(f"[sub2api-patch] patched {bin_path}")
print(f"[sub2api-patch] backup: {backup}")
print(f"[sub2api-patch] replaced UA occurrences: {old_ua_count}")
print(f"[sub2api-patch] replaced version occurrences: {old_ver_count}")
PY
chown sub2api:sub2api "$BIN" 2>/dev/null || true
chmod +x "$BIN"
EOF
sudo chmod +x /usr/local/sbin/sub2api-patch-codex-ua.sh
# 先给当前二进制打一次补丁
sudo /usr/local/sbin/sub2api-patch-codex-ua.sh /opt/sub2api/sub2api
# 添加 systemd override:每次启动 sub2api 前自动重新打补丁
sudo mkdir -p /etc/systemd/system/sub2api.service.d
sudo tee /etc/systemd/system/sub2api.service.d/10-codex-ua-patch.conf >/dev/null <<'EOF'
[Service]
ExecStartPre=+/usr/local/sbin/sub2api-patch-codex-ua.sh /opt/sub2api/sub2api
EOF
# 重载 systemd 并重启服务
sudo systemctl daemon-reload
sudo systemctl restart sub2api
# 查看服务状态
sudo systemctl status sub2api --no-pager
# 验证二进制里的 Codex UA
echo
echo "==== Codex UA markers in binary ===="
strings /opt/sub2api/sub2api | grep -oE 'codex_cli_rs/[0-9]+\.[0-9]+\.[0-9]+' | sort -u || true
echo
echo "==== Version markers around 0.104.0 / 0.125.0 ===="
strings /opt/sub2api/sub2api | grep -oE '0\.104\.0|0\.125\.0' | sort | uniq -c || true
echo
echo "==== Recent sub2api logs ===="
sudo journalctl -u sub2api -n 60 --no-pager
作者不知道啥时候发新版就先用这个顶一下吧
网友解答:--【壹】--:
我觉得不一定下个版本就会修复,哎。之前我做测试的时候,远程压缩这个端点一直是找不到模型 ID, 我一直以为是 OpenAI 那边没写。看这位老哥说的意思,我有点明白了:因为 SUB 在伪装时伪装的是 104 的版本,这个版本没有这个端点,而 105 的端点是有的。也就是说 OpenAI 那边把不同版本单独做了一个模型列表。104 里没有 5.5,所以你用 104 伪装的时候,请求到的对应模型缓存列表也没有 5.5 的模型,远程压缩就会一直失败。然后需要改成 125 的版本。如果 SUB 想不到这一点,我觉得也不一定什么时候会修复。
--【贰】--:
sub应该做成动态设置的,后端ui上改改就可以多好哈哈
--【叁】--:
你是不是有点太小看开源社区了,我昨天就看到一大堆issue和PR了,今早一看就发新版本修复了
--【肆】--:
fix(openai): bump codex CLI version from 0.104.0 to 0.125.0 #1940
这边已经merged了
--【伍】--:
这种下个版本就修复的bug,为什么要做这种持久性的修改?
--【陆】--:
不至于要那么久 其实昨天下午就已经推送新版本彻底修复了
--【柒】--:
昨天118的版本好像已经更新了,我用5.5开强制模式没什么问题
根据GPT5.5在触发上下文压缩的时候报错404了,这个是OpenAI上游的问题还是sub2的问题呢? · Issue #1865 · Wei-Shaw/sub2api · GitHub 这个issue的评论,把codex_cli_rs/0.104.0改成codex_cli_rs/0.124.0 及以上可以修复使用5.5进行compact报404找不到模型的问题。让GPT写了以下脚本进行一键修复。
image1188×497 24.1 KB
如果你是通过脚本安装的sub2api可以尝试一下这个办法
修复完自己测试是可以用5.5进行compact的
e4b134a761c29838df3f50aa8a238fac573×216 2.92 KB
# 安装 strings 所需工具,如果已经有会跳过
if ! command -v strings >/dev/null 2>&1; then
if command -v apt >/dev/null 2>&1; then
sudo apt update
sudo apt install -y binutils
elif command -v yum >/dev/null 2>&1; then
sudo yum install -y binutils
fi
fi
# 创建 Sub2API Codex UA/version 自动补丁脚本
sudo tee /usr/local/sbin/sub2api-patch-codex-ua.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
BIN="${1:-/opt/sub2api/sub2api}"
FROM_UA="codex_cli_rs/0.104.0"
TO_UA="${SUB2API_CODEX_UA:-codex_cli_rs/0.125.0}"
FROM_VER="0.104.0"
TO_VER="${SUB2API_CODEX_VERSION:-0.125.0}"
if [ ! -f "$BIN" ]; then
echo "[sub2api-patch] binary not found: $BIN"
exit 0
fi
if [ "${#FROM_UA}" -ne "${#TO_UA}" ]; then
echo "[sub2api-patch] ERROR: UA replacement must have same length"
echo "[sub2api-patch] FROM=$FROM_UA len=${#FROM_UA}"
echo "[sub2api-patch] TO=$TO_UA len=${#TO_UA}"
exit 1
fi
if [ "${#FROM_VER}" -ne "${#TO_VER}" ]; then
echo "[sub2api-patch] ERROR: version replacement must have same length"
echo "[sub2api-patch] FROM=$FROM_VER len=${#FROM_VER}"
echo "[sub2api-patch] TO=$TO_VER len=${#TO_VER}"
exit 1
fi
python3 - "$BIN" "$FROM_UA" "$TO_UA" "$FROM_VER" "$TO_VER" <<'PY'
import os
import sys
import time
from pathlib import Path
bin_path = Path(sys.argv[1])
from_ua = sys.argv[2].encode()
to_ua = sys.argv[3].encode()
from_ver = sys.argv[4].encode()
to_ver = sys.argv[5].encode()
data = bin_path.read_bytes()
old_ua_count = data.count(from_ua)
old_ver_count = data.count(from_ver)
new_ua_count = data.count(to_ua)
if old_ua_count == 0 and old_ver_count == 0:
if new_ua_count > 0:
print(f"[sub2api-patch] already patched: {bin_path}")
else:
print(f"[sub2api-patch] old markers not found; upstream may already use another version: {bin_path}")
sys.exit(0)
backup = bin_path.with_name(
bin_path.name + ".backup.before-codex-ua-patch." + time.strftime("%Y%m%d%H%M%S")
)
backup.write_bytes(data)
patched = data.replace(from_ua, to_ua)
patched = patched.replace(from_ver, to_ver)
st = bin_path.stat()
tmp = bin_path.with_name(bin_path.name + ".patched.tmp")
tmp.write_bytes(patched)
os.chmod(tmp, st.st_mode)
os.replace(tmp, bin_path)
print(f"[sub2api-patch] patched {bin_path}")
print(f"[sub2api-patch] backup: {backup}")
print(f"[sub2api-patch] replaced UA occurrences: {old_ua_count}")
print(f"[sub2api-patch] replaced version occurrences: {old_ver_count}")
PY
chown sub2api:sub2api "$BIN" 2>/dev/null || true
chmod +x "$BIN"
EOF
sudo chmod +x /usr/local/sbin/sub2api-patch-codex-ua.sh
# 先给当前二进制打一次补丁
sudo /usr/local/sbin/sub2api-patch-codex-ua.sh /opt/sub2api/sub2api
# 添加 systemd override:每次启动 sub2api 前自动重新打补丁
sudo mkdir -p /etc/systemd/system/sub2api.service.d
sudo tee /etc/systemd/system/sub2api.service.d/10-codex-ua-patch.conf >/dev/null <<'EOF'
[Service]
ExecStartPre=+/usr/local/sbin/sub2api-patch-codex-ua.sh /opt/sub2api/sub2api
EOF
# 重载 systemd 并重启服务
sudo systemctl daemon-reload
sudo systemctl restart sub2api
# 查看服务状态
sudo systemctl status sub2api --no-pager
# 验证二进制里的 Codex UA
echo
echo "==== Codex UA markers in binary ===="
strings /opt/sub2api/sub2api | grep -oE 'codex_cli_rs/[0-9]+\.[0-9]+\.[0-9]+' | sort -u || true
echo
echo "==== Version markers around 0.104.0 / 0.125.0 ===="
strings /opt/sub2api/sub2api | grep -oE '0\.104\.0|0\.125\.0' | sort | uniq -c || true
echo
echo "==== Recent sub2api logs ===="
sudo journalctl -u sub2api -n 60 --no-pager
作者不知道啥时候发新版就先用这个顶一下吧
网友解答:--【壹】--:
我觉得不一定下个版本就会修复,哎。之前我做测试的时候,远程压缩这个端点一直是找不到模型 ID, 我一直以为是 OpenAI 那边没写。看这位老哥说的意思,我有点明白了:因为 SUB 在伪装时伪装的是 104 的版本,这个版本没有这个端点,而 105 的端点是有的。也就是说 OpenAI 那边把不同版本单独做了一个模型列表。104 里没有 5.5,所以你用 104 伪装的时候,请求到的对应模型缓存列表也没有 5.5 的模型,远程压缩就会一直失败。然后需要改成 125 的版本。如果 SUB 想不到这一点,我觉得也不一定什么时候会修复。
--【贰】--:
sub应该做成动态设置的,后端ui上改改就可以多好哈哈
--【叁】--:
你是不是有点太小看开源社区了,我昨天就看到一大堆issue和PR了,今早一看就发新版本修复了
--【肆】--:
fix(openai): bump codex CLI version from 0.104.0 to 0.125.0 #1940
这边已经merged了
--【伍】--:
这种下个版本就修复的bug,为什么要做这种持久性的修改?
--【陆】--:
不至于要那么久 其实昨天下午就已经推送新版本彻底修复了
--【柒】--:
昨天118的版本好像已经更新了,我用5.5开强制模式没什么问题

