"""Render and stream real assessment stages without estimated percentages.""" import html from contextvars import copy_context from queue import Queue from threading import Thread def stage_names(mode): steps = [("audio", "Prepare audio"), ("model", "Prepare model")] if mode == "Reference-free": steps.append(("transcribe", "Transcribe speech")) return steps + [("score", "Scoring")] def stage_markup(mode, active=None, complete=False, failed=False): steps = stage_names(mode) index = next((i for i, (key, _) in enumerate(steps) if key == active), -1) items = [] for i, (key, label) in enumerate(steps): state = "done" if complete or 0 <= i < index else "active" if i == index else "pending" if failed and i == index: state = "failed" number = "✓" if state == "done" else str(i + 1) items.append(f'