ChatMessage: wire resume

This commit is contained in:
Enrico Ros
2026-04-22 00:47:37 -07:00
parent cdd7892077
commit 9b8a3ca503
2 changed files with 29 additions and 2 deletions
@@ -123,6 +123,32 @@ export function ChatMessageList(props: {
}
}, [conversationHandler, conversationId, onConversationExecuteHistory]);
const handleMessageUpstreamResume = React.useCallback(async (messageId: DMessageId) => {
if (!conversationId || !conversationHandler) return;
const message = conversationHandler.historyFindMessageOrThrow(messageId);
const generator = message?.generator;
if (!generator?.upstreamHandle) throw new Error('No upstream handle on message');
// For AIX generators the DLLMId is at .aix.mId
const llmId = generator.mgt === 'aix' ? generator.aix.mId : undefined;
if (!llmId) throw new Error('No model id on generator');
const { aixCreateChatGenerateContext, aixReattachContent_DMessage_orThrow } = await import('~/modules/aix/client/aix.client');
await aixReattachContent_DMessage_orThrow(
llmId,
generator,
aixCreateChatGenerateContext('conversation', conversationId),
{ abortSignal: 'NON_ABORTABLE', throttleParallelThreads: 0 },
async (update, isDone) => {
conversationHandler.messageEdit(messageId, {
fragments: update.fragments,
generator: update.generator,
pendingIncomplete: update.pendingIncomplete,
}, isDone /* messageComplete */, true /* touch */);
},
);
}, [conversationHandler, conversationId]);
// message menu methods proxy
@@ -371,6 +397,7 @@ export function ChatMessageList(props: {
onMessageBeam={handleMessageBeam}
onMessageBranch={handleMessageBranch}
onMessageContinue={handleMessageContinue}
onMessageUpstreamResume={handleMessageUpstreamResume}
onMessageDelete={handleMessageDelete}
onMessageFragmentAppend={handleMessageAppendFragment}
onMessageFragmentDelete={handleMessageDeleteFragment}
@@ -893,10 +893,10 @@ export function ChatMessage(props: {
)}
{/* Upstream Resume - shows whenever there's a stored handle (incl. post-reload, where no error fragment is present) */}
{fromAssistant && messageGenerator?.upstreamHandle && (
{!messagePendingIncomplete && props.isBottom && fromAssistant && messageGenerator?.upstreamHandle && !!onMessageUpstreamResume && (
<BlockOpUpstreamResume
upstreamHandle={messageGenerator.upstreamHandle}
onResume={onMessageUpstreamResume ? handleUpstreamResume : undefined}
onResume={handleUpstreamResume}
/>
)}