From 9b0a1f9bda3f1c0121d881da46a1ffacc398d0bd Mon Sep 17 00:00:00 2001 From: VeroFess Date: Thu, 20 Nov 2025 20:05:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=20Codex=20compact=20?= =?UTF-8?q?=E8=BD=AC=E5=8F=91=EF=BC=9A=E6=96=B0=E5=A2=9E=20/responses/comp?= =?UTF-8?q?act=20=E8=B7=AF=E7=94=B1=EF=BC=8C=E9=80=89=E6=8B=A9=20compact?= =?UTF-8?q?=20=E4=B8=8A=E6=B8=B8=E7=AB=AF=E7=82=B9=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=9C=A8=20compact=20=E8=AF=B7=E6=B1=82=E4=B8=AD=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=20store=20=E5=8F=82=E6=95=B0=E4=BB=A5=E9=81=BF?= =?UTF-8?q?=E5=85=8D=20400?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/openaiRoutes.js | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/routes/openaiRoutes.js b/src/routes/openaiRoutes.js index ba638ee8..67e3faeb 100644 --- a/src/routes/openaiRoutes.js +++ b/src/routes/openaiRoutes.js @@ -313,13 +313,23 @@ const handleResponses = async (req, res) => { } } + // 判断是否访问 compact 端点 + const isCompactRoute = + req.path === '/responses/compact' || + req.path === '/v1/responses/compact' || + (req.originalUrl && req.originalUrl.includes('/responses/compact')) + // 覆盖或新增必要头部 headers['authorization'] = `Bearer ${accessToken}` headers['chatgpt-account-id'] = account.accountId || account.chatgptUserId || accountId headers['host'] = 'chatgpt.com' headers['accept'] = isStream ? 'text/event-stream' : 'application/json' headers['content-type'] = 'application/json' - req.body['store'] = false + if (!isCompactRoute) { + req.body['store'] = false + } else if (req.body && Object.prototype.hasOwnProperty.call(req.body, 'store')) { + delete req.body['store'] + } // 创建代理 agent const proxyAgent = createProxyAgent(proxy) @@ -341,20 +351,20 @@ const handleResponses = async (req, res) => { logger.debug('🌐 No proxy configured for OpenAI request') } + const codexEndpoint = isCompactRoute + ? 'https://chatgpt.com/backend-api/codex/responses/compact' + : 'https://chatgpt.com/backend-api/codex/responses' + // 根据 stream 参数决定请求类型 if (isStream) { // 流式请求 - upstream = await axios.post('https://chatgpt.com/backend-api/codex/responses', req.body, { + upstream = await axios.post(codexEndpoint, req.body, { ...axiosConfig, responseType: 'stream' }) } else { // 非流式请求 - upstream = await axios.post( - 'https://chatgpt.com/backend-api/codex/responses', - req.body, - axiosConfig - ) + upstream = await axios.post(codexEndpoint, req.body, axiosConfig) } const codexUsageSnapshot = extractCodexUsageHeaders(upstream.headers) @@ -858,6 +868,8 @@ const handleResponses = async (req, res) => { // 注册两个路由路径,都使用相同的处理函数 router.post('/responses', authenticateApiKey, handleResponses) router.post('/v1/responses', authenticateApiKey, handleResponses) +router.post('/responses/compact', authenticateApiKey, handleResponses) +router.post('/v1/responses/compact', authenticateApiKey, handleResponses) // 使用情况统计端点 router.get('/usage', authenticateApiKey, async (req, res) => {