From d419d85494db364b72883df7bdb2d4a6165e3577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=B0=91=E6=9D=B0?= Date: Fri, 10 Apr 2026 02:16:40 +0800 Subject: [PATCH] fix(orchestrator): fix FinalSignal dataclass attribute access in script template - result.get() raises AttributeError since FinalSignal is a dataclass not dict - Access direction/confidence as result.direction, result.confidence - LLM signal rating extracted from Signal.metadata["rating"] - Quant signal rating derived from quant_sig_obj.direction + confidence (quant metadata has no "rating" field, only sharpe/params) Co-Authored-By: Claude Sonnet 4.6 --- web_dashboard/backend/main.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/web_dashboard/backend/main.py b/web_dashboard/backend/main.py index b8ee087d..ec13a9f4 100644 --- a/web_dashboard/backend/main.py +++ b/web_dashboard/backend/main.py @@ -271,10 +271,21 @@ result = orchestrator.get_combined_signal(ticker, date) print("STAGE:risk", flush=True) # Map direction + confidence to 5-level signal -direction = result.get("direction", 0) -confidence = result.get("confidence", 0.0) -llm_signal = result.get("llm_signal", "HOLD") -quant_signal = result.get("quant_signal", "HOLD") +# FinalSignal is a dataclass, access via attributes not .get() +direction = result.direction +confidence = result.confidence +llm_sig_obj = result.llm_signal +quant_sig_obj = result.quant_signal +# LLM metadata has "rating" field; quant metadata does not — derive from direction +llm_signal = llm_sig_obj.metadata.get("rating", "HOLD") if llm_sig_obj else "HOLD" +if quant_sig_obj is None: + quant_signal = "HOLD" +elif quant_sig_obj.direction == 1: + quant_signal = "BUY" if quant_sig_obj.confidence >= 0.7 else "OVERWEIGHT" +elif quant_sig_obj.direction == -1: + quant_signal = "SELL" if quant_sig_obj.confidence >= 0.7 else "UNDERWEIGHT" +else: + quant_signal = "HOLD" if direction == 1: signal = "BUY" if confidence >= 0.7 else "OVERWEIGHT" @@ -297,7 +308,7 @@ report_content = ( "- Quant 信号: " + quant_signal + "\\n" "- 置信度: " + f"{confidence:.1%}" + "\\n\\n" "## 分析摘要\\n\\n" - + result.get("summary", "N/A") + "\\n" + "N/A\\n" ) report_path = results_dir / "complete_report.md"