From 6e8741f0aeca0671b49a00956c523cef9442be8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E4=B8=80=E4=B8=81?= <1769123563@qq.com> Date: Sat, 15 Nov 2025 15:24:10 +0800 Subject: [PATCH] Optimize Rendering Logic with New IR Binding --- ReportEngine/renderers/html_renderer.py | 67 +++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/ReportEngine/renderers/html_renderer.py b/ReportEngine/renderers/html_renderer.py index 43f1608..a2f7513 100644 --- a/ReportEngine/renderers/html_renderer.py +++ b/ReportEngine/renderers/html_renderer.py @@ -709,10 +709,36 @@ class HTMLRenderer: } handler = handlers.get(block_type) if handler: - return handler(block) + html_fragment = handler(block) + return self._wrap_error_block(html_fragment, block) if isinstance(block.get("blocks"), list): - return self._render_blocks(block["blocks"]) - return f'
{self._escape_html(json.dumps(block, ensure_ascii=False, indent=2))}'
+ html_fragment = self._render_blocks(block["blocks"])
+ return self._wrap_error_block(html_fragment, block)
+ fallback = f'{self._escape_html(json.dumps(block, ensure_ascii=False, indent=2))}'
+ return self._wrap_error_block(fallback, block)
+
+ def _wrap_error_block(self, html_fragment: str, block: Dict[str, Any]) -> str:
+ """若block标记了error元数据,则包裹提示容器并注入tooltip。"""
+ if not html_fragment:
+ return html_fragment
+ meta = block.get("meta") or {}
+ log_ref = meta.get("errorLogRef")
+ if not isinstance(log_ref, dict):
+ return html_fragment
+ raw_preview = (meta.get("rawJsonPreview") or "")[:1200]
+ error_message = meta.get("errorMessage") or "LLM返回块解析错误"
+ importance = meta.get("importance") or "standard"
+ ref_label = ""
+ if log_ref.get("relativeFile") and log_ref.get("entryId"):
+ ref_label = f"{log_ref['relativeFile']}#{log_ref['entryId']}"
+ tooltip = f"{error_message} | {ref_label}".strip()
+ attr_raw = self._escape_attr(raw_preview or tooltip)
+ attr_title = self._escape_attr(tooltip)
+ class_suffix = self._escape_attr(importance)
+ return (
+ f'