feat(codex): 支持compact端点非流式请求,更新请求头与字段清理

- Codex适配器支持compact端点:非流式请求使用application/json Accept头,
  stream_policy根据compact上下文返回FORCE_NON_STREAM
- 更新Codex请求头格式:添加Version/Connection头,header key首字母大写
- 简化include列表处理:normalizer和request_patching统一强制为固定列表
- 清理Codex不支持的字段:truncation、context_management、user
- 默认instructions改为空字符串
- 前端用量页面:用户页面使用前端筛选后总数,避免不必要的后端分页请求
This commit is contained in:
fawney19
2026-03-01 18:20:42 +08:00
parent d4840df447
commit a137601728
9 changed files with 190 additions and 67 deletions

View File

@@ -3,6 +3,10 @@ from __future__ import annotations
from dataclasses import dataclass
from types import SimpleNamespace
from src.services.provider.adapters.codex.context import (
CodexRequestContext,
set_codex_request_context,
)
from src.services.provider.transport import build_provider_url
@@ -44,3 +48,19 @@ def test_codex_openai_cli_does_not_duplicate_responses_suffix() -> None:
)
assert url == "https://chatgpt.com/backend-api/codex/responses"
def test_codex_openai_cli_uses_compact_suffix_when_context_marked_compact() -> None:
endpoint = _DummyEndpoint(
base_url="https://chatgpt.com/backend-api/codex",
api_format="openai:cli",
provider=SimpleNamespace(provider_type="codex"),
)
set_codex_request_context(CodexRequestContext(is_compact=True))
url = build_provider_url(
endpoint, # type: ignore[arg-type]
path_params={"model": "ignored"},
is_stream=False,
)
assert url == "https://chatgpt.com/backend-api/codex/responses/compact"
set_codex_request_context(None)