Files
life-echo/api/app/features/evaluation/composite_score.py

35 lines
967 B
Python
Raw Normal View History

"""评测合成记分(与批量实验 Celery 解耦后的纯函数,供单测保留)。"""
from __future__ import annotations
from typing import Any
def composite_score(
conv: float | None,
mem: float | None,
weights: dict[str, Any] | None,
) -> float | None:
"""合成总分;缺失的一侧不计为 0避免把评审失败误标为极差。
仅一侧有分返回该侧原始分不乘权重表示当前 run 仅完成了部分评审维度
"""
w = weights or {}
wc = float(w.get("conversation", 0.5))
wm = float(w.get("memoir", 0.5))
has_c = conv is not None
has_m = mem is not None
if not has_c and not has_m:
return None
if has_c and has_m:
return float(wc) * float(conv) + float(wm) * float(mem)
if has_c:
return float(conv)
return float(mem)
# 兼容旧测试中的私有名
_composite = composite_score
__all__ = ["composite_score", "_composite"]