v3.2.5: сравнение первый vs остальные, таймер LLM
This commit is contained in:
+14
-5
@@ -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 = []
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user