refactor(normalizer): 移除 request key reorder 机制,保持自然插入顺序

移除 OpenAI/OpenAI CLI normalizer 中的 _reorder_request_prefix_keys 及
基类 _reorder_request_keys 死代码,request_from_internal 直接返回构建
顺序的 dict,测试同步更新为验证自然插入顺序。
This commit is contained in:
fawney19
2026-03-18 14:01:56 +08:00
parent cbb66a5667
commit 696ec65175
5 changed files with 41 additions and 42 deletions

View File

@@ -160,21 +160,6 @@ class FormatNormalizer(ABC):
def _extract_extra(self, payload: dict[str, Any], known_keys: set[str]) -> dict[str, Any]:
return {k: v for k, v in payload.items() if k not in known_keys}
@staticmethod
def _reorder_request_keys(
payload: dict[str, Any],
prefix_keys: tuple[str, ...],
) -> dict[str, Any]:
"""将指定字段前置,其余保持原序,用于稳定请求体前缀以提升 prompt cache 命中率。"""
ordered: dict[str, Any] = {}
for key in prefix_keys:
if key in payload:
ordered[key] = payload[key]
for key, value in payload.items():
if key not in ordered:
ordered[key] = value
return ordered
def _merge_dropped(self, target: dict[str, int], source: dict[str, int]) -> None:
for k, v in source.items():
target[k] = target.get(k, 0) + int(v)

View File

@@ -453,7 +453,7 @@ class OpenAINormalizer(FormatNormalizer):
if key in _CHAT_PASSTHROUGH_KEYS and key not in result and key not in _HANDLED_KEYS:
result[key] = value
return self._reorder_request_prefix_keys(result)
return result
# =========================
# Responses
@@ -1401,11 +1401,6 @@ class OpenAINormalizer(FormatNormalizer):
joined = "\n\n".join(parts)
return joined or None
_REQUEST_PREFIX_KEYS = ("model", "tools", "messages")
def _reorder_request_prefix_keys(self, payload: dict[str, Any]) -> dict[str, Any]:
return self._reorder_request_keys(payload, self._REQUEST_PREFIX_KEYS)
def _openai_tools_to_internal(self, tools: Any) -> list[ToolDefinition] | None:
if not tools or not isinstance(tools, list):
return None

View File

@@ -76,8 +76,6 @@ from src.core.api_format.conversion.stream_events import (
from src.core.api_format.conversion.stream_state import StreamState
from src.core.logger import logger
_OPENAI_CLI_REQUEST_PREFIX_KEYS = ("model", "instructions", "tools", "input")
def _is_chat_completions_response(data: dict[str, Any]) -> bool:
"""检测数据是否为 OpenAI Chat Completions 格式(而非 Responses API 格式)。
@@ -103,18 +101,6 @@ def _get_openai_chat_normalizer() -> "FormatNormalizer | None":
return format_conversion_registry.get_normalizer("openai:chat")
def reorder_openai_cli_request_prefix_keys(payload: dict[str, Any]) -> dict[str, Any]:
"""Keep the stable OpenAI Responses prefix ahead of the typically dynamic tail."""
ordered: dict[str, Any] = {}
for key in _OPENAI_CLI_REQUEST_PREFIX_KEYS:
if key in payload:
ordered[key] = payload[key]
for key, value in payload.items():
if key not in ordered:
ordered[key] = value
return ordered
class OpenAICliNormalizer(FormatNormalizer):
FORMAT_ID = "openai:cli"
capabilities = FormatCapabilities(
@@ -282,7 +268,6 @@ class OpenAICliNormalizer(FormatNormalizer):
result: dict[str, Any] = {"model": internal.model}
if instructions_text or has_explicit_instructions:
result["instructions"] = instructions_text or ""
# Keep the stable system prefix ahead of the typically dynamic input payload.
result["input"] = self._internal_messages_to_input(
internal.messages,
system_to_developer=False,
@@ -409,7 +394,7 @@ class OpenAICliNormalizer(FormatNormalizer):
):
result[key] = value
return self._reorder_request_prefix_keys(result)
return result
# =========================
# Responses
@@ -2135,9 +2120,6 @@ class OpenAICliNormalizer(FormatNormalizer):
joined = "\n\n".join(parts)
return joined or None
def _reorder_request_prefix_keys(self, payload: dict[str, Any]) -> dict[str, Any]:
return reorder_openai_cli_request_prefix_keys(payload)
def _error_type_from_value(self, value: str) -> ErrorType:
for t in ErrorType:
if t.value == value: