fix: reject conflicting raw reasoning overrides before sending

This commit is contained in:
2026-09-09 01:26:34 -04:00
parent 1ee74c35a8
commit 8e61a66342
4 changed files with 213 additions and 110 deletions
+19 -8
View File
@@ -34,7 +34,12 @@ from polygateway.sources import (
RoundRobinSelector,
SourceCooldownMemo,
)
from polygateway.thinking import effective_effort, get_capability, resolve_thinking
from polygateway.thinking import (
effective_effort,
get_capability,
resolve_thinking,
validate_thinking_raw,
)
from polygateway.transports.openai_compat import OpenAICompatTransport
from polygateway.types import (
ChatRequest,
@@ -82,21 +87,26 @@ def _guard_thinking(
就带着指路信息炸掉。`get_provider` 现在就是同一形态的双点调用。
"""
for source, profile in zip(sources, profiles, strict=True):
effort = effective_effort(
request_effort=None,
source_effort=source.reasoning_effort,
enable_thinking=source.enable_thinking,
)
resolve_thinking(
profile,
get_capability(source.model, table=capabilities),
# 装配期看不见请求级档位(它逐次调用才产生),故只解源级两层;请求级
# 只能在运行期由 transport 校验(设计 §10 的装配期/运行期分工)
effective_effort(
request_effort=None,
source_effort=source.reasoning_effort,
enable_thinking=source.enable_thinking,
),
effort,
model=source.model,
# 与 transport 用同一个 fallback,否则配了 nearest 的源会在装配期就被
# 判死,而它在运行期本来是能映射到最近档跑起来的
fallback=source.effort_fallback,
)
validate_thinking_raw(
source.extra_body,
effort=effort,
wire=profile.thinking,
origin=f"源 {source.name} extra_body",
)
def _fingerprint_mark(source: SourceConfig) -> str:
@@ -359,6 +369,7 @@ class GatewayClient:
if reasoning_effort is None
else coerce_effort(reasoning_effort, origin="chat(reasoning_effort=...)")
)
validate_thinking_raw(sampling, effort=effort, wire=None, origin="chat overlay")
request = ChatRequest(
messages=messages,
session_id=session_id,