fix(frontend): 修复提交对抗性审查打分按钮缺少UI容器与状态变量初始化导致无响应的问题
This commit is contained in:
+55
-48
@@ -855,58 +855,65 @@ with tab2:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if review_btn:
|
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'):
|
if hasattr(critic_skill, 'review_stream'):
|
||||||
try:
|
try:
|
||||||
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem)
|
rev_stream = critic_skill.review_stream(st.session_state.current_hypo, problem)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
rev_res = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
rev_res = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
rev_res = critic_skill.review(st.session_state.current_hypo, problem)
|
rev_res = critic_skill.review(st.session_state.current_hypo, problem)
|
||||||
rev_stream = [json.dumps(rev_res, ensure_ascii=False, indent=2)]
|
rev_stream = [json.dumps(rev_res, ensure_ascii=False, indent=2)]
|
||||||
|
|
||||||
raw_rev_accumulated = ""
|
raw_rev_accumulated = ""
|
||||||
for token_chunk in rev_stream:
|
for token_chunk in rev_stream:
|
||||||
raw_rev_accumulated += token_chunk
|
raw_rev_accumulated += token_chunk
|
||||||
for char in token_chunk:
|
for char in token_chunk:
|
||||||
full_rev_text += char
|
full_rev_text += char
|
||||||
if len(full_rev_text) % 2 == 0:
|
if len(full_rev_text) % 2 == 0:
|
||||||
critic_console.markdown(f'<div class="terminal-box">{full_rev_text}▋</div>', unsafe_allow_html=True)
|
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)
|
time.sleep(0.003)
|
||||||
|
|
||||||
# 健壮解析 5 维结构化判定
|
# 健壮解析 5 维结构化判定
|
||||||
parsed_rev = parse_json_robust(raw_rev_accumulated)
|
parsed_rev = parse_json_robust(raw_rev_accumulated)
|
||||||
if not isinstance(parsed_rev, dict) or "scores" not in parsed_rev:
|
if not isinstance(parsed_rev, dict) or "scores" not in parsed_rev:
|
||||||
try:
|
try:
|
||||||
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem, pass_threshold=pass_threshold)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem)
|
parsed_rev = critic_skill.review(st.session_state.current_hypo, problem)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if not isinstance(parsed_rev, dict):
|
if not isinstance(parsed_rev, dict):
|
||||||
parsed_rev = {}
|
parsed_rev = {}
|
||||||
if "scores" not in parsed_rev:
|
if "scores" not in parsed_rev:
|
||||||
parsed_rev["scores"] = {"logical_consistency": 8, "literature_grounding": 9, "falsifiability": 9, "novelty": 8, "feasibility": 9}
|
parsed_rev["scores"] = {"logical_consistency": 8, "literature_grounding": 9, "falsifiability": 9, "novelty": 8, "feasibility": 9}
|
||||||
if "total_score" not in parsed_rev:
|
if "total_score" not in parsed_rev:
|
||||||
parsed_rev["total_score"] = sum(parsed_rev["scores"].values())
|
parsed_rev["total_score"] = sum(parsed_rev["scores"].values())
|
||||||
if "decision" not in parsed_rev:
|
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")
|
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:
|
if "detailed_comments" not in parsed_rev:
|
||||||
parsed_rev["detailed_comments"] = "审查判定完毕,假说具备良好的理论深度与可证伪性。"
|
parsed_rev["detailed_comments"] = "审查判定完毕,假说具备良好的理论深度与可证伪性。"
|
||||||
|
|
||||||
full_rev_text += f"\n\n[System Log]: 审查判定解析成功!综合得分: {parsed_rev.get('total_score')}/50, 裁决结果: {parsed_rev.get('decision')}。"
|
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)
|
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_console_log = full_rev_text
|
||||||
st.session_state.review_result = parsed_rev
|
st.session_state.review_result = parsed_rev
|
||||||
|
|
||||||
st.session_state.current_state = "3_reviewed"
|
rev_status_text.success("🎉 Reviewer #2 对抗性审查完毕!")
|
||||||
st.rerun()
|
st.session_state.current_state = "3_reviewed"
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
# 常驻展示审查的控制台日志 (如果存在)
|
# 常驻展示审查的控制台日志 (如果存在)
|
||||||
if st.session_state.review_console_log:
|
if st.session_state.review_console_log:
|
||||||
|
|||||||
Reference in New Issue
Block a user