mirror of
https://github.com/ThearchyHelios/AgentLab.git
synced 2026-11-15 00:21:58 +00:00
证据面板的计算一步照服务端写好的字显示:具名的数按结论记的格式(占比 61.9%,不再写 0.618556701031)、结果表的格同样(变化率 -14.6%),空格写「—」不写 null;列类型照结果表的 column_types。比率拆解的整体比率那一格和对照的那一格也按格式写(3.5%,不是 0.035)。前端照原样显示(只补一句说明)
This commit is contained in:
@@ -1173,12 +1173,17 @@ async def _analysis_chain(seg: dict[str, Any], cite: dict[str, Any], entry: dict
|
|||||||
|
|
||||||
def _analysis_calc(alias: str, result: dict[str, Any], cited: dict[str, Any], hidden: set[str]) -> dict[str, Any]:
|
def _analysis_calc(alias: str, result: dict[str, Any], cited: dict[str, Any], hidden: set[str]) -> dict[str, Any]:
|
||||||
"""计算一步:结果表(前 table_top_k 段加上被引用的那一行附近,最多 MAX_ANALYSIS_ROWS 行,高亮被引用的格)、具名的数(原值、
|
"""计算一步:结果表(前 table_top_k 段加上被引用的那一行附近,最多 MAX_ANALYSIS_ROWS 行,高亮被引用的格)、具名的数(原值、
|
||||||
渲染出来的字)、关键数的代入式。结果表里万一有取自遮罩列的列(输入查询步骤里遮着的列名),照查询步骤写「已遮罩」。"""
|
渲染出来的字)、关键数的代入式。数和格都按结论记的格式写出来(占比、变化率是百分数,比率的变化是百分点),和正文引用
|
||||||
|
之后显示的字一样;结果表的空格写「—」不写 null,面板照原样显示。结果表里万一有取自遮罩列的列(输入查询步骤里遮着的
|
||||||
|
列名),照查询步骤写「已遮罩」。"""
|
||||||
values = result.get("values") if isinstance(result.get("values"), dict) else {}
|
values = result.get("values") if isinstance(result.get("values"), dict) else {}
|
||||||
|
named = result.get("value_formats") if isinstance(result.get("value_formats"), dict) else {}
|
||||||
shown_values = []
|
shown_values = []
|
||||||
for key, raw in values.items():
|
for key, raw in values.items():
|
||||||
try:
|
try:
|
||||||
text = render_cell(raw)
|
# 具名的数按结论记的格式写(占比、变化率是百分数),和引用之后正文显示的字一样
|
||||||
|
conv = named.get(key) if isinstance(named.get(key), str) and named.get(key) else None
|
||||||
|
text = render_cell(raw, conv)
|
||||||
except RenderError:
|
except RenderError:
|
||||||
text = MISSING
|
text = MISSING
|
||||||
shown_values.append({"key": str(key), "raw": raw, "rendered": text,
|
shown_values.append({"key": str(key), "raw": raw, "rendered": text,
|
||||||
@@ -1201,8 +1206,8 @@ def _analysis_calc(alias: str, result: dict[str, Any], cited: dict[str, Any], hi
|
|||||||
step["table"] = {
|
step["table"] = {
|
||||||
"columns": columns, "labels": dict(table.get("labels") or {}) if isinstance(table.get("labels"), dict) else {},
|
"columns": columns, "labels": dict(table.get("labels") or {}) if isinstance(table.get("labels"), dict) else {},
|
||||||
"total_rows": len(rows), "row_index": picked,
|
"total_rows": len(rows), "row_index": picked,
|
||||||
"rows": [[MASKED if i in masked else v for i, v in enumerate(rows[r])] if isinstance(rows[r], list) else rows[r]
|
"rows": [[MASKED if i in masked else _shown_cell(v, table, columns[i]) for i, v in enumerate(rows[r])]
|
||||||
for r in picked],
|
if isinstance(rows[r], list) else rows[r] for r in picked],
|
||||||
"masked": [columns[i] for i in sorted(masked)],
|
"masked": [columns[i] for i in sorted(masked)],
|
||||||
"highlight": {"cells": [[row, str(cited.get("column"))]] if isinstance(row, int) else []},
|
"highlight": {"cells": [[row, str(cited.get("column"))]] if isinstance(row, int) else []},
|
||||||
**({"window_truncated": True} if len(index) > MAX_ANALYSIS_ROWS else {}),
|
**({"window_truncated": True} if len(index) > MAX_ANALYSIS_ROWS else {}),
|
||||||
@@ -1210,6 +1215,22 @@ def _analysis_calc(alias: str, result: dict[str, Any], cited: dict[str, Any], hi
|
|||||||
return step
|
return step
|
||||||
|
|
||||||
|
|
||||||
|
def _shown_cell(raw: Any, table: Mapping[str, Any], column: str) -> str:
|
||||||
|
"""结果表的一格按结论记的格式写出来(占比、变化率是百分数,比率的变化是百分点),空格写「—」不写 null:面板照原样显示,
|
||||||
|
读者看到的和正文引用那一格时一样。列类型照结果表的 column_types(文本列照原样,不按值猜);渲染不出来(不是 0 却显示成 0)
|
||||||
|
的照原样写。"""
|
||||||
|
if raw is None:
|
||||||
|
return MISSING
|
||||||
|
formats = table.get("formats") if isinstance(table.get("formats"), dict) else {}
|
||||||
|
types = table.get("column_types") if isinstance(table.get("column_types"), dict) else {}
|
||||||
|
conv = formats.get(column) if isinstance(formats.get(column), str) and formats.get(column) else None
|
||||||
|
kind = types.get(column) if isinstance(types.get(column), str) else None
|
||||||
|
try:
|
||||||
|
return render_cell(raw, conv, kind=kind)
|
||||||
|
except RenderError:
|
||||||
|
return str(raw)
|
||||||
|
|
||||||
|
|
||||||
async def _analysis_inputs(alias: str, result: dict[str, Any], catalog: dict[str, Any], doc: dict[str, Any],
|
async def _analysis_inputs(alias: str, result: dict[str, Any], catalog: dict[str, Any], doc: dict[str, Any],
|
||||||
sealed: _Sealed, masks: _Masks, *, queries: bool = True
|
sealed: _Sealed, masks: _Masks, *, queries: bool = True
|
||||||
) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
|
) -> tuple[list[dict[str, Any]], list[dict[str, Any]]]:
|
||||||
@@ -1247,8 +1268,12 @@ async def _analysis_inputs(alias: str, result: dict[str, Any], catalog: dict[str
|
|||||||
sealed=sealed.trusted and query is not None)
|
sealed=sealed.trusted and query is not None)
|
||||||
if role in totals and totals[role] in values:
|
if role in totals and totals[role] in values:
|
||||||
with contextlib.suppress(RenderError):
|
with contextlib.suppress(RenderError):
|
||||||
step["closure"] = {"mode": mode, "total_key": totals[role], "total": render_cell(values[totals[role]]),
|
# 整体比率那一格和对照的那一格按结论记的格式写(比率拆解里都是比率,一起写成百分数),和具名的数、正文一致
|
||||||
"headline": render_cell(item.get("value")), "closed": not unclosed}
|
named = result.get("value_formats") if isinstance(result.get("value_formats"), dict) else {}
|
||||||
|
key = totals[role]
|
||||||
|
conv = named.get(key) if isinstance(named.get(key), str) and named.get(key) else None
|
||||||
|
step["closure"] = {"mode": mode, "total_key": key, "total": render_cell(values[key], conv),
|
||||||
|
"headline": render_cell(item.get("value"), conv), "closed": not unclosed}
|
||||||
steps.append(step)
|
steps.append(step)
|
||||||
if artifact and query is not None:
|
if artifact and query is not None:
|
||||||
wanted = cells.setdefault(artifact, [])
|
wanted = cells.setdefault(artifact, [])
|
||||||
|
|||||||
Reference in New Issue
Block a user