new indicators in web ui for llm stuff

This commit is contained in:
legop3
2026-02-25 15:21:54 -05:00
parent 30671332af
commit 0a65c43eb0
5 changed files with 51 additions and 10 deletions
+41
View File
@@ -285,6 +285,7 @@ function LlmCommentaryPanel({ status, onClearHistory, clearingHistory }) {
: status.lastOutcome === 'posted'
? 'text-emerald-300'
: 'text-slate-300';
const largeIndicator = buildLlmLargeIndicator(status);
const conversationRows = buildLlmConversationRows(status);
return (
@@ -300,6 +301,10 @@ function LlmCommentaryPanel({ status, onClearHistory, clearingHistory }) {
{clearingHistory ? 'Clearing...' : 'Clear LLM History'}
</button>
</div>
<div className={`surface border text-center ${largeIndicator.className}`}>
<div className="text-[1.1rem] font-bold tracking-wide">{largeIndicator.label}</div>
<div className="text-xs text-slate-200">{largeIndicator.detail}</div>
</div>
<div className="surface space-y-0.5 text-xs text-slate-200">
<div className="flex items-center justify-between">
<span>Enabled</span>
@@ -421,6 +426,42 @@ function LlmCommentaryPanel({ status, onClearHistory, clearingHistory }) {
);
}
function buildLlmLargeIndicator(status) {
if (status?.inFlight) {
return {
label: 'IN FLIGHT',
detail: 'Generating commentary now',
className: 'border-amber-400/60 bg-amber-700/20 text-amber-200',
};
}
if (status?.lastOutcome === 'posted') {
return {
label: 'POSTED',
detail: status?.lastPostedText ? `Last: ${status.lastPostedText}` : 'Commentary posted',
className: 'border-emerald-400/60 bg-emerald-700/20 text-emerald-200',
};
}
if (status?.lastOutcome === 'skipped') {
return {
label: 'SKIPPED',
detail: status?.lastReason || 'Model chose to skip',
className: 'border-slate-400/60 bg-slate-700/30 text-slate-200',
};
}
if (status?.lastOutcome === 'failed') {
return {
label: 'FAILED',
detail: status?.lastError || status?.lastReason || 'Tick failed',
className: 'border-red-400/60 bg-red-700/20 text-red-200',
};
}
return {
label: status?.running ? 'IDLE' : 'STOPPED',
detail: status?.lastReason || 'Waiting for next tick',
className: 'border-sky-400/50 bg-sky-700/20 text-sky-200',
};
}
function buildLlmConversationRows(status) {
const now = Date.now();
const modelMessages = Array.isArray(status?.lastModelMessages) ? status.lastModelMessages : [];