from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
CHAT = (ROOT / "static/js/chat.js").read_text()
RENDERER = (ROOT / "static/js/chatRenderer.js").read_text()
def test_processing_indicator_shows_live_ttft_timer():
assert "Processing request ยท ${elapsed.toFixed(1)}s" in CHAT
assert "_ttftDisplayTimer = setInterval(update, 100);" in CHAT
def test_ttft_stops_on_model_output_not_agent_prep_metadata():
assert "if (data && data !== '[DONE]') markFirstVisibleOutput();" not in CHAT
assert "typeof json.delta === 'string' && json.delta.length > 0" in CHAT
assert "json.type === 'final_response'" in CHAT
def test_measured_ttft_is_shown_in_message_stats():
assert "metrics.client_ttft = _clientTtftSeconds" in CHAT
assert "metrics.client_ttft ?? metrics.time_to_first_token" in RENDERER
assert 'TTFT' in RENDERER
def test_compact_footer_and_details_show_real_performance_counters():
assert "`${Number(tps).toFixed(2)} tok/s`" in RENDERER
assert "const visibleTtft = metrics.client_ttft ?? metrics.time_to_first_token" in RENDERER
assert "${Number(visibleTtft).toFixed(3)}s" in RENDERER
assert "${Number(injectedTokens).toLocaleString()}" in RENDERER
assert 'Input' in RENDERER
assert 'Injected' in RENDERER
assert 'all rounds' not in RENDERER
assert 'first request' not in RENDERER
assert 'Tool schemas' in RENDERER
assert 'Agent rounds' in RENDERER
assert 'Tool calls' in RENDERER
assert "metrics.tps_source === 'computed' ? 'Speed (wall)'" in RENDERER