v3.2.5: сравнение первый vs остальные, таймер LLM
This commit is contained in:
+14
-5
@@ -88,23 +88,32 @@ def process(cid):
|
|||||||
extracted[s["supp_id"]] = rows
|
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"
|
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"
|
yield f"data: {_json.dumps({'type': 'diff_start', 'files': len(supp_rows)})}\n\n"
|
||||||
|
|
||||||
# Группируем: initial + amendments
|
# Группируем: ищем amendments, если нет — сравниваем первый с остальными
|
||||||
initial_rows = None
|
initial_rows = None
|
||||||
amendments = []
|
amendments = []
|
||||||
|
|
||||||
for s in supp_rows:
|
for s in supp_rows:
|
||||||
if s["type"] == "initial":
|
if s["type"] != "initial":
|
||||||
initial_rows = extracted.get(s["supp_id"], [])
|
|
||||||
else:
|
|
||||||
amendments.append({
|
amendments.append({
|
||||||
"supp_id": s["supp_id"],
|
"supp_id": s["supp_id"],
|
||||||
"filename": s["filename"],
|
"filename": s["filename"],
|
||||||
"type": s["type"],
|
"type": s["type"],
|
||||||
"rows": extracted.get(s["supp_id"], []),
|
"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 = []
|
all_changes = []
|
||||||
|
|
||||||
|
|||||||
@@ -448,6 +448,12 @@
|
|||||||
diffBody.innerHTML = '<span style="color:var(--muted);">⏳ LLM-извлечение строк спецификации...</span>';
|
diffBody.innerHTML = '<span style="color:var(--muted);">⏳ LLM-извлечение строк спецификации...</span>';
|
||||||
|
|
||||||
var es = new EventSource('/llm/process/' + contractId);
|
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) {
|
es.onmessage = function(e) {
|
||||||
var d = JSON.parse(e.data);
|
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>';
|
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') {
|
else if (d.type === 'done') {
|
||||||
|
clearInterval(timerInterval);
|
||||||
es.close();
|
es.close();
|
||||||
llmBtn.innerHTML = '<i data-lucide="check" style="width:16px;height:16px;"></i> ✓ Готово';
|
llmBtn.innerHTML = '<i data-lucide="check" style="width:16px;height:16px;"></i> ✓ Готово';
|
||||||
lucide.createIcons();
|
lucide.createIcons();
|
||||||
@@ -505,6 +512,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
es.addEventListener('error', function() {
|
es.addEventListener('error', function() {
|
||||||
|
clearInterval(timerInterval);
|
||||||
es.close();
|
es.close();
|
||||||
llmBtn.innerHTML = '<i data-lucide="scale" style="width:16px;height:16px;"></i> Сравнить (LLM)';
|
llmBtn.innerHTML = '<i data-lucide="scale" style="width:16px;height:16px;"></i> Сравнить (LLM)';
|
||||||
llmBtn.disabled = false;
|
llmBtn.disabled = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user