v3.2.5: сравнение первый vs остальные, таймер LLM

This commit is contained in:
2026-06-18 09:14:32 +04:00
parent 08c7af2a77
commit e3b7f283f0
2 changed files with 22 additions and 5 deletions
+14 -5
View File
@@ -88,23 +88,32 @@ def process(cid):
extracted[s["supp_id"]] = rows
yield f"data: {_json.dumps({'type': 'extract_done', 'name': s['filename'], 'time_s': elapsed, 'count': len(rows), 'unresolved': unresolved})}\n\n"
# ── Шаг 2: Сравнение допников ────────────────────────
# ── Шаг 2: Сравнение ────────────────────────────────
yield f"data: {_json.dumps({'type': 'diff_start', 'files': len(supp_rows)})}\n\n"
# Группируем: initial + amendments
# Группируем: ищем amendments, если нет — сравниваем первый с остальными
initial_rows = None
amendments = []
for s in supp_rows:
if s["type"] == "initial":
initial_rows = extracted.get(s["supp_id"], [])
else:
if s["type"] != "initial":
amendments.append({
"supp_id": s["supp_id"],
"filename": s["filename"],
"type": s["type"],
"rows": extracted.get(s["supp_id"], []),
})
elif initial_rows is None:
# Первый initial — базовый
initial_rows = extracted.get(s["supp_id"], [])
else:
# Последующие initial — как допники (fallback)
amendments.append({
"supp_id": s["supp_id"],
"filename": s["filename"],
"type": "initial",
"rows": extracted.get(s["supp_id"], []),
})
all_changes = []
+8
View File
@@ -448,6 +448,12 @@
diffBody.innerHTML = '<span style="color:var(--muted);">⏳ LLM-извлечение строк спецификации...</span>';
var es = new EventSource('/llm/process/' + contractId);
var llmStart = Date.now();
var timerInterval = setInterval(function() {
var elapsed = ((Date.now() - llmStart) / 1000).toFixed(1);
diffStatus.textContent = '⏳ ' + elapsed + 'с';
}, 200);
es.onmessage = function(e) {
var d = JSON.parse(e.data);
@@ -473,6 +479,7 @@
diffBody.innerHTML += '<div style="font-size:12px;margin-left:8px;">' + d.name + ': <span style="color:var(--green);">+' + (s.added||0) + '</span> <span style="color:#eab308;">~' + (s.changed||0) + '</span> <span style="color:var(--destructive);">-' + (s.deleted||0) + '</span></div>';
}
else if (d.type === 'done') {
clearInterval(timerInterval);
es.close();
llmBtn.innerHTML = '<i data-lucide="check" style="width:16px;height:16px;"></i> ✓ Готово';
lucide.createIcons();
@@ -505,6 +512,7 @@
};
es.addEventListener('error', function() {
clearInterval(timerInterval);
es.close();
llmBtn.innerHTML = '<i data-lucide="scale" style="width:16px;height:16px;"></i> Сравнить (LLM)';
llmBtn.disabled = false;