fix: void the cost of rows whose usage is unavailable
失败尝试与终态失败行的 usage_source 由 estimated 改 unavailable(用量确实 不可得),并在 TelemetryEmitter 的成本换算里为 unavailable 短路记 NULL。 短路刻意插在 cache_hit 分支之后: 缓存命中未产生新调用,0.0 是事实而非未知。 附 OCR 成功行的防回归钉(仍为 measured、settle 恒 0,设计 §3.3 剔出决定)。
This commit is contained in:
@@ -44,7 +44,7 @@ class TelemetryEmitter:
|
||||
response: LLMResponse | None,
|
||||
error: str | None,
|
||||
) -> None:
|
||||
"""逐次尝试记录(RetryMW 调用);失败尝试 usage 按 estimated 记 0。"""
|
||||
"""逐次尝试记录(RetryMW 调用);失败尝试无用量可言,记 0 并标 unavailable。"""
|
||||
await self._record(
|
||||
request=request,
|
||||
call_id=call_id,
|
||||
@@ -55,7 +55,7 @@ class TelemetryEmitter:
|
||||
thinking=response.thinking if response else "",
|
||||
prompt_tokens=response.prompt_tokens if response else 0,
|
||||
completion_tokens=response.completion_tokens if response else 0,
|
||||
usage_source=response.usage_source if response else "estimated",
|
||||
usage_source=response.usage_source if response else "unavailable",
|
||||
latency_ms=latency_ms,
|
||||
ttft_ms=response.ttft_ms if response else None,
|
||||
max_inter_token_ms=response.max_inter_token_ms if response else None,
|
||||
@@ -97,7 +97,7 @@ class TelemetryEmitter:
|
||||
thinking="",
|
||||
prompt_tokens=0,
|
||||
completion_tokens=0,
|
||||
usage_source="estimated",
|
||||
usage_source="unavailable",
|
||||
latency_ms=latency_ms,
|
||||
ttft_ms=None,
|
||||
max_inter_token_ms=None,
|
||||
@@ -129,6 +129,10 @@ class TelemetryEmitter:
|
||||
# 失败/终态行 None;未注入价格表 = 恒 None(M1 现状)
|
||||
if cache_hit:
|
||||
cost: float | None = 0.0
|
||||
elif usage_source == "unavailable":
|
||||
# 用量不可得: 宁可算不出成本,也不算错成本(解耦设计 §3.1 不变式)。
|
||||
# 必须排在 cache_hit 之后——缓存命中未产生新调用,0.0 是事实而非未知
|
||||
cost = None
|
||||
elif error is None and model and self._pricing is not None:
|
||||
cost = self._pricing.cost(model, prompt_tokens, completion_tokens)
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user