SpringWang08 commited on
Commit
ad0cfad
·
1 Parent(s): 5f8ad9f

Show per-model running state during prediction

Browse files
Files changed (1) hide show
  1. web/static/index.html +25 -6
web/static/index.html CHANGED
@@ -477,15 +477,22 @@ Medical VQA web demo for six-model comparison.
477
  const res = byVariant[variant];
478
  const status = res ? res.status : "not requested";
479
  const ok = res && res.status === "ok";
 
480
  const answer = res ? (res.prediction || res.status) : "Not requested";
481
- const cardTone = ok ? "border-emerald-200/70 shadow-[0_18px_40px_rgba(16,185,129,0.10)]" : res ? "border-rose-200/70 shadow-[0_18px_40px_rgba(244,63,94,0.08)]" : "border-china-gold/25 shadow-sm";
482
- const answerTone = ok ? "text-ink-black" : res ? "text-rose-700" : "text-amber-700";
 
 
 
 
 
 
483
  return `
484
  <article class="tilt-card bg-paper-white border ${cardTone} p-5 md:p-6 flex flex-col gap-4 relative overflow-hidden">
485
  <div class="absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-transparent via-imperial-red to-transparent ${ok ? 'opacity-100' : 'opacity-45'}"></div>
486
  <div class="flex items-center justify-between gap-4">
487
  <div class="flex items-center gap-3">
488
- <div class="size-11 rounded-full border flex items-center justify-center ${ok ? 'bg-emerald-50 text-emerald-700 border-emerald-200' : res ? 'bg-rose-50 text-rose-700 border-rose-200' : 'bg-amber-50 text-amber-700 border-amber-200'} ${ok ? 'pulse-ring' : ''}">
489
  <span class="material-symbols-outlined text-[22px]">${meta.icon}</span>
490
  </div>
491
  <div>
@@ -494,13 +501,13 @@ Medical VQA web demo for six-model comparison.
494
  </div>
495
  </div>
496
  <span class="text-[11px] uppercase tracking-[0.18em] font-bold ${ok ? 'text-emerald-700' : res ? 'text-rose-700' : 'text-amber-700'}">
497
- ${res ? (ok ? "Output" : "Error") : "Idle"}
498
  </span>
499
  </div>
500
 
501
  <div class="min-h-[120px] rounded-none border border-china-gold/20 bg-[#FAF7F0] p-5 flex items-center">
502
  <p class="text-[18px] md:text-[20px] leading-relaxed font-serif ${answerTone}">
503
- ${escapeHtml(answer)}
504
  </p>
505
  </div>
506
 
@@ -513,6 +520,16 @@ Medical VQA web demo for six-model comparison.
513
  }).join("");
514
  }
515
 
 
 
 
 
 
 
 
 
 
 
516
  function updateModelChips() {
517
  document.querySelectorAll(".model-chip").forEach((chip) => {
518
  const variant = chip.dataset.model;
@@ -622,6 +639,8 @@ Medical VQA web demo for six-model comparison.
622
  el.runBtn.disabled = true;
623
  el.runBtn.querySelector("span").textContent = "Running...";
624
  setStatus("Running all selected models...");
 
 
625
 
626
  try {
627
  const formData = new FormData();
@@ -634,7 +653,7 @@ Medical VQA web demo for six-model comparison.
634
  if (!res.ok) {
635
  throw new Error(data?.detail || "Prediction failed");
636
  }
637
- renderModelGrid(data.results || [], data.question || el.question.value.trim(), data.summary);
638
  applyTiltEffect(".tilt-card", 5);
639
  setStatus(`Done. ${data.summary?.success_count ?? 0} models succeeded.`);
640
  } catch (err) {
 
477
  const res = byVariant[variant];
478
  const status = res ? res.status : "not requested";
479
  const ok = res && res.status === "ok";
480
+ const running = res && res.status === "running";
481
  const answer = res ? (res.prediction || res.status) : "Not requested";
482
+ const cardTone = ok
483
+ ? "border-emerald-200/70 shadow-[0_18px_40px_rgba(16,185,129,0.10)]"
484
+ : running
485
+ ? "border-china-gold/50 shadow-[0_18px_40px_rgba(168,24,27,0.12)]"
486
+ : res
487
+ ? "border-rose-200/70 shadow-[0_18px_40px_rgba(244,63,94,0.08)]"
488
+ : "border-china-gold/25 shadow-sm";
489
+ const answerTone = ok ? "text-ink-black" : running ? "text-china-gold" : res ? "text-rose-700" : "text-amber-700";
490
  return `
491
  <article class="tilt-card bg-paper-white border ${cardTone} p-5 md:p-6 flex flex-col gap-4 relative overflow-hidden">
492
  <div class="absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-transparent via-imperial-red to-transparent ${ok ? 'opacity-100' : 'opacity-45'}"></div>
493
  <div class="flex items-center justify-between gap-4">
494
  <div class="flex items-center gap-3">
495
+ <div class="size-11 rounded-full border flex items-center justify-center ${ok ? 'bg-emerald-50 text-emerald-700 border-emerald-200' : running ? 'bg-amber-50 text-amber-700 border-amber-200 pulse-ring' : res ? 'bg-rose-50 text-rose-700 border-rose-200' : 'bg-amber-50 text-amber-700 border-amber-200'}">
496
  <span class="material-symbols-outlined text-[22px]">${meta.icon}</span>
497
  </div>
498
  <div>
 
501
  </div>
502
  </div>
503
  <span class="text-[11px] uppercase tracking-[0.18em] font-bold ${ok ? 'text-emerald-700' : res ? 'text-rose-700' : 'text-amber-700'}">
504
+ ${running ? "Running" : res ? (ok ? "Output" : "Error") : "Idle"}
505
  </span>
506
  </div>
507
 
508
  <div class="min-h-[120px] rounded-none border border-china-gold/20 bg-[#FAF7F0] p-5 flex items-center">
509
  <p class="text-[18px] md:text-[20px] leading-relaxed font-serif ${answerTone}">
510
+ ${running ? "Predicting..." : escapeHtml(answer)}
511
  </p>
512
  </div>
513
 
 
520
  }).join("");
521
  }
522
 
523
+ function renderRunningModelGrid() {
524
+ const runningResults = Array.from(selectedModels).map((variant) => ({
525
+ variant,
526
+ status: "running",
527
+ prediction: "",
528
+ prediction_raw: "",
529
+ }));
530
+ renderModelGrid(runningResults);
531
+ }
532
+
533
  function updateModelChips() {
534
  document.querySelectorAll(".model-chip").forEach((chip) => {
535
  const variant = chip.dataset.model;
 
639
  el.runBtn.disabled = true;
640
  el.runBtn.querySelector("span").textContent = "Running...";
641
  setStatus("Running all selected models...");
642
+ renderRunningModelGrid();
643
+ applyTiltEffect(".tilt-card", 5);
644
 
645
  try {
646
  const formData = new FormData();
 
653
  if (!res.ok) {
654
  throw new Error(data?.detail || "Prediction failed");
655
  }
656
+ renderModelGrid(data.results || []);
657
  applyTiltEffect(".tilt-card", 5);
658
  setStatus(`Done. ${data.summary?.success_count ?? 0} models succeeded.`);
659
  } catch (err) {