Spaces:
Running
Running
Update index.html
Browse files- index.html +19 -0
index.html
CHANGED
|
@@ -552,6 +552,7 @@ let transcript = []; // {name, role, text, round, tokens, ms, isUser, ki
|
|
| 552 |
let resume = { round: 1, stepIdx: 0, steps: null };
|
| 553 |
let stats = { tokens: {}, turns: {}, speeds: [], startTs: 0 };
|
| 554 |
let analysis = null; // {consensus, votes, conclusion, evaluation, relations, extra, argmap, devil}
|
|
|
|
| 555 |
let debateFinished = false;
|
| 556 |
|
| 557 |
function esc(s) { const d = document.createElement('div'); d.textContent = s; return d.innerHTML; }
|
|
@@ -1210,6 +1211,7 @@ async function runDevil() {
|
|
| 1210 |
/* ================= An\u00e1lisis: orquestaci\u00f3n y render ================= */
|
| 1211 |
async function runAnalysis(auto) {
|
| 1212 |
if (!wllama || !transcript.length) return;
|
|
|
|
| 1213 |
$('analyze-btn').disabled = true;
|
| 1214 |
$('analysis-empty').classList.add('hidden');
|
| 1215 |
$('analysis-out').innerHTML = '';
|
|
@@ -1218,6 +1220,7 @@ async function runAnalysis(auto) {
|
|
| 1218 |
const consensus = await runConsensus();
|
| 1219 |
const evaluation = await runEvaluation();
|
| 1220 |
const argmap = await runArgMap();
|
|
|
|
| 1221 |
analysis = { consensus, evaluation, argmap, devil: analysis?.devil || null, ts: Date.now() };
|
| 1222 |
renderAnalysis();
|
| 1223 |
saveToLibrary();
|
|
@@ -1438,6 +1441,14 @@ $('lib-clear').addEventListener('click', () => {
|
|
| 1438 |
function reopenDebate(id) {
|
| 1439 |
const it = lsGet(K.library, []).find(x => x.id === id);
|
| 1440 |
if (!it) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1441 |
topic = it.topic; mode = it.mode;
|
| 1442 |
$('topic').value = it.topic;
|
| 1443 |
selectMode(it.mode);
|
|
@@ -1464,6 +1475,13 @@ let replayTimer = null;
|
|
| 1464 |
function replayDebate(id) {
|
| 1465 |
const it = lsGet(K.library, []).find(x => x.id === id);
|
| 1466 |
if (!it) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1467 |
document.querySelector('nav.tabs button[data-tab="debate"]').click();
|
| 1468 |
chatEl.innerHTML = '';
|
| 1469 |
addSysNote(`\u23EA Replay: ${it.topic} (${it.transcript.length} turnos)`);
|
|
@@ -1532,6 +1550,7 @@ function startFresh(newTopic) {
|
|
| 1532 |
['st-turns', 'st-tokens'].forEach(id => $(id).textContent = '0');
|
| 1533 |
$('st-speed').textContent = '—'; $('st-time').textContent = '0:00'; $('st-agents').innerHTML = '';
|
| 1534 |
resume = { round: 1, stepIdx: 0, steps: null };
|
|
|
|
| 1535 |
analysis = null;
|
| 1536 |
debateFinished = false;
|
| 1537 |
$('analysis-out').innerHTML = '';
|
|
|
|
| 552 |
let resume = { round: 1, stepIdx: 0, steps: null };
|
| 553 |
let stats = { tokens: {}, turns: {}, speeds: [], startTs: 0 };
|
| 554 |
let analysis = null; // {consensus, votes, conclusion, evaluation, relations, extra, argmap, devil}
|
| 555 |
+
let analysisToken = 0;
|
| 556 |
let debateFinished = false;
|
| 557 |
|
| 558 |
function esc(s) { const d = document.createElement('div'); d.textContent = s; return d.innerHTML; }
|
|
|
|
| 1211 |
/* ================= An\u00e1lisis: orquestaci\u00f3n y render ================= */
|
| 1212 |
async function runAnalysis(auto) {
|
| 1213 |
if (!wllama || !transcript.length) return;
|
| 1214 |
+
const myToken = ++analysisToken;
|
| 1215 |
$('analyze-btn').disabled = true;
|
| 1216 |
$('analysis-empty').classList.add('hidden');
|
| 1217 |
$('analysis-out').innerHTML = '';
|
|
|
|
| 1220 |
const consensus = await runConsensus();
|
| 1221 |
const evaluation = await runEvaluation();
|
| 1222 |
const argmap = await runArgMap();
|
| 1223 |
+
if (myToken !== analysisToken) return; // debate reabierto o reiniciado durante el análisis
|
| 1224 |
analysis = { consensus, evaluation, argmap, devil: analysis?.devil || null, ts: Date.now() };
|
| 1225 |
renderAnalysis();
|
| 1226 |
saveToLibrary();
|
|
|
|
| 1441 |
function reopenDebate(id) {
|
| 1442 |
const it = lsGet(K.library, []).find(x => x.id === id);
|
| 1443 |
if (!it) return;
|
| 1444 |
+
if (running) {
|
| 1445 |
+
stopRequested = true;
|
| 1446 |
+
setStatus('Pausando el debate actual antes de reabrir\u2026');
|
| 1447 |
+
const waiter = setInterval(() => { if (!running) { clearInterval(waiter); reopenDebate(id); } }, 150);
|
| 1448 |
+
return;
|
| 1449 |
+
}
|
| 1450 |
+
document.querySelectorAll('.modal.open').forEach(m => m.classList.remove('open'));
|
| 1451 |
+
analysisToken++;
|
| 1452 |
topic = it.topic; mode = it.mode;
|
| 1453 |
$('topic').value = it.topic;
|
| 1454 |
selectMode(it.mode);
|
|
|
|
| 1475 |
function replayDebate(id) {
|
| 1476 |
const it = lsGet(K.library, []).find(x => x.id === id);
|
| 1477 |
if (!it) return;
|
| 1478 |
+
if (running) {
|
| 1479 |
+
stopRequested = true;
|
| 1480 |
+
setStatus('Pausando el debate actual antes del replay\u2026');
|
| 1481 |
+
const waiter = setInterval(() => { if (!running) { clearInterval(waiter); replayDebate(id); } }, 150);
|
| 1482 |
+
return;
|
| 1483 |
+
}
|
| 1484 |
+
document.querySelectorAll('.modal.open').forEach(m => m.classList.remove('open'));
|
| 1485 |
document.querySelector('nav.tabs button[data-tab="debate"]').click();
|
| 1486 |
chatEl.innerHTML = '';
|
| 1487 |
addSysNote(`\u23EA Replay: ${it.topic} (${it.transcript.length} turnos)`);
|
|
|
|
| 1550 |
['st-turns', 'st-tokens'].forEach(id => $(id).textContent = '0');
|
| 1551 |
$('st-speed').textContent = '—'; $('st-time').textContent = '0:00'; $('st-agents').innerHTML = '';
|
| 1552 |
resume = { round: 1, stepIdx: 0, steps: null };
|
| 1553 |
+
analysisToken++;
|
| 1554 |
analysis = null;
|
| 1555 |
debateFinished = false;
|
| 1556 |
$('analysis-out').innerHTML = '';
|