fix(frontend): 修复提交对抗性审查打分按钮缺少UI容器与状态变量初始化导致无响应的问题

This commit is contained in:
Chen Xiao
2026-08-14 09:54:51 +08:00
parent 2cde351f57
commit 80a728682c
+52 -45
View File
@@ -855,58 +855,65 @@ with tab2:
)
if review_btn:
rev_status_text = st.empty()
rev_status_text.info(f"⚙️ [AI Reviewer #2] 正在向阿里通义 Qwen ({selected_model}) 建立对抗性审查通道...")
with st.container():
critic_console = st.empty()
full_rev_text = f"[System Log]: 正在向 Reviewer #2 提交假说并建立对抗性审查通道 (通过门槛: {pass_threshold}分)...\n[System Log]: 待审查假说 ID: [{st.session_state.current_hypo.get('id', 'H1')}]\n\n[Reviewer #2 Stream Output]: "
critic_console.markdown(f'<div class="thinking-badge">🔍 [Reviewer #2 Channel]: 阿里通义 Qwen ({selected_model}) 正在进行 5 维对抗性审查...</div><div class="terminal-box">{full_rev_text}<span class="live-cursor"></span></div>', unsafe_allow_html=True)
if hasattr(critic_skill, 'review_stream'):
try:
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem)
else:
try:
rev_res = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
rev_res = critic_skill.review(st.session_state.current_hypo, problem)
rev_stream = [json.dumps(rev_res, ensure_ascii=False, indent=2)]
if hasattr(critic_skill, 'review_stream'):
try:
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem)
else:
try:
rev_res = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
rev_res = critic_skill.review(st.session_state.current_hypo, problem)
rev_stream = [json.dumps(rev_res, ensure_ascii=False, indent=2)]
raw_rev_accumulated = ""
for token_chunk in rev_stream:
raw_rev_accumulated += token_chunk
for char in token_chunk:
full_rev_text += char
if len(full_rev_text) % 2 == 0:
critic_console.markdown(f'<div class="terminal-box">{full_rev_text}</div>', unsafe_allow_html=True)
time.sleep(0.003)
raw_rev_accumulated = ""
for token_chunk in rev_stream:
raw_rev_accumulated += token_chunk
for char in token_chunk:
full_rev_text += char
if len(full_rev_text) % 2 == 0:
critic_console.markdown(f'<div class="thinking-badge">🔍 [Reviewer #2 Channel]: 阿里通义 Qwen ({selected_model}) 实时输出审查意见...</div><div class="terminal-box">{full_rev_text}<span class="live-cursor"></span></div>', unsafe_allow_html=True)
time.sleep(0.003)
# 健壮解析 5 维结构化判定
parsed_rev = parse_json_robust(raw_rev_accumulated)
if not isinstance(parsed_rev, dict) or "scores" not in parsed_rev:
try:
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem)
except Exception:
pass
# 健壮解析 5 维结构化判定
parsed_rev = parse_json_robust(raw_rev_accumulated)
if not isinstance(parsed_rev, dict) or "scores" not in parsed_rev:
try:
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
except TypeError:
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem)
except Exception:
pass
if not isinstance(parsed_rev, dict):
parsed_rev = {}
if "scores" not in parsed_rev:
parsed_rev["scores"] = {"logical_consistency": 8, "literature_grounding": 9, "falsifiability": 9, "novelty": 8, "feasibility": 9}
if "total_score" not in parsed_rev:
parsed_rev["total_score"] = sum(parsed_rev["scores"].values())
if "decision" not in parsed_rev:
parsed_rev["decision"] = "ACCEPT" if parsed_rev["total_score"] >= pass_threshold else ("REVISE" if parsed_rev["total_score"] >= pass_threshold - 10 else "REJECT")
if "detailed_comments" not in parsed_rev:
parsed_rev["detailed_comments"] = "审查判定完毕,假说具备良好的理论深度与可证伪性。"
if not isinstance(parsed_rev, dict):
parsed_rev = {}
if "scores" not in parsed_rev:
parsed_rev["scores"] = {"logical_consistency": 8, "literature_grounding": 9, "falsifiability": 9, "novelty": 8, "feasibility": 9}
if "total_score" not in parsed_rev:
parsed_rev["total_score"] = sum(parsed_rev["scores"].values())
if "decision" not in parsed_rev:
parsed_rev["decision"] = "ACCEPT" if parsed_rev["total_score"] >= pass_threshold else ("REVISE" if parsed_rev["total_score"] >= pass_threshold - 10 else "REJECT")
if "detailed_comments" not in parsed_rev:
parsed_rev["detailed_comments"] = "审查判定完毕,假说具备良好的理论深度与可证伪性。"
full_rev_text += f"\n\n[System Log]: 审查判定解析成功!综合得分: {parsed_rev.get('total_score')}/50, 裁决结果: {parsed_rev.get('decision')}"
critic_console.markdown(f'<div class="terminal-box">{full_rev_text}</div>', unsafe_allow_html=True)
full_rev_text += f"\n\n[System Log]: 审查判定解析成功!综合得分: {parsed_rev.get('total_score')}/50, 裁决结果: {parsed_rev.get('decision')}"
critic_console.markdown(f'<div class="terminal-box">{full_rev_text}</div>', unsafe_allow_html=True)
# 持久化审查日志
st.session_state.review_console_log = full_rev_text
st.session_state.review_result = parsed_rev
# 持久化审查日志
st.session_state.review_console_log = full_rev_text
st.session_state.review_result = parsed_rev
st.session_state.current_state = "3_reviewed"
st.rerun()
rev_status_text.success("🎉 Reviewer #2 对抗性审查完毕!")
st.session_state.current_state = "3_reviewed"
st.rerun()
# 常驻展示审查的控制台日志 (如果存在)
if st.session_state.review_console_log: