{#snippet chunkRow(rendered: RenderedChunk)} {#if rendered.role === "user"}
{#if rendered.chunk.type === "text"}

{rendered.chunk.text}

{:else if rendered.chunk.type === "image"} {rendered.chunk.mimeType {/if}
{:else if rendered.chunk.type === "thinking"}
{#snippet title()} {rendered.streaming ? "Thinking" : "Thoughts"} {#if rendered.streaming} {/if} {/snippet}

{rendered.chunk.type === "thinking" ? rendered.chunk.text : ""}

{:else}
{#if rendered.chunk.type === "text"} {:else if rendered.chunk.type === "error"} {:else if rendered.chunk.type === "system"}
{rendered.chunk.text}
{/if}
{/if} {/snippet}
{#if hasEarlier && onShowEarlier}
{/if} {#each keyedRows as { row, key } (key)}
{#if row.kind === "step-metrics"} {@const sv = viewStepMetrics(row.step, row.index)} {@const stepCache = viewCacheRate(row.step.usage)}
{sv.label} · {sv.tokensLabel} {#if sv.tps} · {sv.tps}{/if} {#if sv.ttft} · {sv.ttft} to first token{/if} · cache: {stepCache.pct}%
{:else if row.kind === "turn-metrics"} {@const turnView = viewTurnMetrics(row.turn, row.turnNumber)} {@const lastCache = viewCacheRate(row.turn.usage)} {@const chatCache = viewCacheRate(row.cumulativeUsage)} {@const retention = viewExpectedCache(row.turn.steps[0]?.usage, row.prevLastStepUsage)}
{turnView.label} · {turnView.tokensLabel} · {turnView.breakdown} {#if turnView.tps} · {turnView.tps}{/if} {#if turnView.duration} · {turnView.duration}{/if}
Last turn: {lastCache.pct}% Chat Total: {chatCache.pct}% {#if retention} Retention: {retention.pct}% {/if}
{:else if row.group.kind === "single"} {@render chunkRow(row.group.chunk)} {:else}
{/if}
{/each} {#if providerRetry} {@const rv = viewProviderRetry(providerRetry)}
{rv.attemptLabel} — retrying in {rv.delayLabel}… {#if rv.code} {rv.code} {/if}
{rv.message}
{/if}