fix(llm): relax guidance and preserve judge output

This commit is contained in:
2026-07-24 14:06:51 +08:00
parent 44812f70e3
commit fd53bab639
7 changed files with 548 additions and 275 deletions
+39 -36
View File
@@ -245,13 +245,44 @@ i.icon.spinning {
<?php echo isset($verdict_tip) ? htmlspecialchars($verdict_tip, ENT_QUOTES, 'UTF-8') : ''; ?>
</div>
<!-- 3. 原始评测信息:按原权限保留,默认折叠 -->
<div class="ui styled accordion" id="raw-info-accordion">
<div class="title">
<i class="dropdown icon"></i>
<?php echo isset($MSG_RAW_ERROR) ? $MSG_RAW_ERROR : '查看原始评测信息'; ?>
<?php if (!empty($view_reinfo_dedup_count)): ?>
<span class="ui tiny teal label dedup-label">
<?php echo sprintf(isset($MSG_DEDUP_HINT) ? $MSG_DEDUP_HINT : '已折叠 %d 个相同测试点', intval($view_reinfo_dedup_count)); ?>
</span>
<?php endif; ?>
<?php if (trim($view_reinfo) === ''): ?>
<span class="dedup-label empty-notice">(无)</span>
<?php endif; ?>
</div>
<div class="content">
<?php if (trim($view_reinfo) === ''): ?>
<p class="empty-notice">当前判题结果没有原始评测信息(如 TLE/MLE 通常不会写 runtimeinfo)。</p>
<?php else: ?>
<pre id="errtxt"><?php
// 普通用户:控制器提供的评测信息;管理员/源浏览者:完整原文
if (isset($is_admin_session) && $is_admin_session) {
echo htmlspecialchars($view_reinfo_raw, ENT_QUOTES, 'UTF-8');
} elseif (isset($is_source_browser) && $is_source_browser) {
echo htmlspecialchars($view_reinfo_raw, ENT_QUOTES, 'UTF-8');
} else {
echo htmlspecialchars($view_reinfo, ENT_QUOTES, 'UTF-8');
}
?></pre>
<?php endif; ?>
</div>
</div>
<!-- 3. AI 指导:仅错误终态渲染,并自动展开/请求一次 -->
<!-- 4. AI 指导:仅错误终态渲染,并自动展开/请求一次 -->
<?php if (isset($OJ_LLM_ENABLED) && $OJ_LLM_ENABLED) {
require("template/$OJ_TEMPLATE/llm-guidance.php");
} ?>
<!-- 3.5. 对比详情(WA/PE 时显示,diff 视图) -->
<!-- 5. 对比详情(WA/PE 时显示,diff 视图) -->
<?php if (!empty($diff_blocks) && is_array($diff_blocks)): ?>
<div id="diff-section">
<h3 class="ui header" style="margin-top: 0;">
@@ -269,7 +300,7 @@ i.icon.spinning {
<?php
$download_base = llm_guidance_testcase_base($block['name']);
$download_allowed = isset($OJ_DOWNLOAD) && $OJ_DOWNLOAD
&& !empty($llm_guidance_download_allowed)
&& !empty($testcase_download_allowed)
&& $download_base !== null
&& (!(isset($OJ_DL_1ST_WA_ONLY) && $OJ_DL_1ST_WA_ONLY) || $idx === 0);
if ($download_allowed):
@@ -320,39 +351,7 @@ i.icon.spinning {
</div>
<?php endif; ?>
<!-- 4. 原始错误折叠(默认收起) -->
<div class="ui styled accordion" id="raw-info-accordion">
<div class="title">
<i class="dropdown icon"></i>
<?php echo isset($MSG_RAW_ERROR) ? $MSG_RAW_ERROR : '查看原始错误信息'; ?>
<?php if (!empty($view_reinfo_dedup_count)): ?>
<span class="ui tiny teal label dedup-label">
<?php echo sprintf(isset($MSG_DEDUP_HINT) ? $MSG_DEDUP_HINT : '已折叠 %d 个相同测试点', intval($view_reinfo_dedup_count)); ?>
</span>
<?php endif; ?>
<?php if (trim($view_reinfo) === ''): ?>
<span class="dedup-label empty-notice">(无)</span>
<?php endif; ?>
</div>
<div class="content">
<?php if (trim($view_reinfo) === ''): ?>
<p class="empty-notice">当前判题结果没有原始错误信息(如 TLE/MLE 通常不会写 runtimeinfo)。</p>
<?php else: ?>
<pre id="errtxt"><?php
// 普通用户:折叠后;管理员/源浏览者:原文
if (isset($is_admin_session) && $is_admin_session) {
echo htmlspecialchars($view_reinfo_raw, ENT_QUOTES, 'UTF-8');
} elseif (isset($is_source_browser) && $is_source_browser) {
echo htmlspecialchars($view_reinfo_raw, ENT_QUOTES, 'UTF-8');
} else {
echo htmlspecialchars($view_reinfo, ENT_QUOTES, 'UTF-8');
}
?></pre>
<?php endif; ?>
</div>
</div>
<!-- 5. 快捷操作区 -->
<!-- 6. 快捷操作区 -->
<div class="quick-actions">
<div class="ui horizontal divider">
<?php echo isset($MSG_QUICK_ACTIONS) ? $MSG_QUICK_ACTIONS : '快捷操作'; ?>
@@ -384,6 +383,8 @@ i.icon.spinning {
$('#raw-info-accordion').accordion('open', 0);
<?php } elseif (isset($is_source_browser) && $is_source_browser) { ?>
$('#raw-info-accordion').accordion('open', 0);
<?php } elseif (isset($llm_guidance['mode']) && $llm_guidance['mode'] === 'judge_output') { ?>
$('#raw-info-accordion').accordion('open', 0);
<?php } ?>
HustOJVditor.renderMarkdownBlocks('#errtxt', {
@@ -451,6 +452,8 @@ i.icon.spinning {
$('#raw-info-accordion').accordion('open', 0);
<?php } elseif (isset($is_source_browser) && $is_source_browser) { ?>
$('#raw-info-accordion').accordion('open', 0);
<?php } elseif (isset($llm_guidance['mode']) && $llm_guidance['mode'] === 'judge_output') { ?>
$('#raw-info-accordion').accordion('open', 0);
<?php } ?>
});
</script>