feat: ScenarioInfo exposes metric_weights and doc_weights from YAML
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -74,6 +74,18 @@ class ReportData(BaseModel):
|
|||||||
lowest_samples: list[SampleScore] = Field(default_factory=list)
|
lowest_samples: list[SampleScore] = Field(default_factory=list)
|
||||||
summary_markdown: str = ""
|
summary_markdown: str = ""
|
||||||
advice_markdown: str = "" # optimization_advice.md content (empty if not generated)
|
advice_markdown: str = "" # optimization_advice.md content (empty if not generated)
|
||||||
|
weighted_score_mean: float | None = Field(
|
||||||
|
default=None,
|
||||||
|
description="加权综合得分均值(metric_weights × doc_weights 共同作用)。",
|
||||||
|
)
|
||||||
|
metric_weights: dict[str, float] = Field(
|
||||||
|
default_factory=dict,
|
||||||
|
description="该次运行使用的指标权重配置(来自 scenario.snapshot.yaml)。",
|
||||||
|
)
|
||||||
|
doc_weights: dict[str, float] = Field(
|
||||||
|
default_factory=dict,
|
||||||
|
description="该次运行使用的文档权重配置(来自 scenario.snapshot.yaml)。",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class RunDetail(BaseModel):
|
class RunDetail(BaseModel):
|
||||||
@@ -93,6 +105,14 @@ class ScenarioInfo(BaseModel):
|
|||||||
judge_model: str = ""
|
judge_model: str = ""
|
||||||
metrics: list[str] = Field(default_factory=list)
|
metrics: list[str] = Field(default_factory=list)
|
||||||
error: str = ""
|
error: str = ""
|
||||||
|
metric_weights: dict[str, float] = Field(
|
||||||
|
default_factory=dict,
|
||||||
|
description="从场景 YAML 读取的指标权重配置,供前端权重面板预填。",
|
||||||
|
)
|
||||||
|
doc_weights: dict[str, float] = Field(
|
||||||
|
default_factory=dict,
|
||||||
|
description="从场景 YAML 读取的文档权重配置,供前端权重面板预填。",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TaskStatus(BaseModel):
|
class TaskStatus(BaseModel):
|
||||||
|
|||||||
@@ -37,6 +37,16 @@ def _summarize_scenario(path: Path) -> ScenarioInfo:
|
|||||||
|
|
||||||
metrics = payload.get("metrics")
|
metrics = payload.get("metrics")
|
||||||
metric_list = [str(item) for item in metrics] if isinstance(metrics, list) else []
|
metric_list = [str(item) for item in metrics] if isinstance(metrics, list) else []
|
||||||
|
raw_metric_weights = payload.get("metric_weights") or {}
|
||||||
|
raw_doc_weights = payload.get("doc_weights") or {}
|
||||||
|
metric_weights = {
|
||||||
|
str(k): float(v) for k, v in raw_metric_weights.items()
|
||||||
|
if isinstance(v, (int, float))
|
||||||
|
}
|
||||||
|
doc_weights = {
|
||||||
|
str(k): float(v) for k, v in raw_doc_weights.items()
|
||||||
|
if isinstance(v, (int, float))
|
||||||
|
}
|
||||||
|
|
||||||
return ScenarioInfo(
|
return ScenarioInfo(
|
||||||
path=relative,
|
path=relative,
|
||||||
@@ -45,6 +55,8 @@ def _summarize_scenario(path: Path) -> ScenarioInfo:
|
|||||||
dataset=str(payload.get("dataset", "")),
|
dataset=str(payload.get("dataset", "")),
|
||||||
judge_model=str(payload.get("judge_model", "")),
|
judge_model=str(payload.get("judge_model", "")),
|
||||||
metrics=metric_list,
|
metrics=metric_list,
|
||||||
|
metric_weights=metric_weights,
|
||||||
|
doc_weights=doc_weights,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user