This commit is contained in:
Timothy Jaeryang Baek 2026-08-13 22:01:15 -06:00
parent 256cce505b
commit 14e4d72d9a
8 changed files with 45 additions and 16 deletions

View file

@ -502,13 +502,14 @@
return;
}
await resolveChatMessageToolCall(localStorage.token, $chatId, messageId, callId, 'answer', {
const res = await resolveChatMessageToolCall(localStorage.token, $chatId, messageId, callId, 'answer', {
answers,
timed_out: timedOut
}).catch(async (error) => {
toast.error(`${error}`);
await loadChat();
});
onToolCallResolved(res);
};
const rejectPendingAskUser = async (messageId, callId) => {
@ -516,7 +517,7 @@
return;
}
await resolveChatMessageToolCall(
const res = await resolveChatMessageToolCall(
localStorage.token,
$chatId,
messageId,
@ -526,6 +527,7 @@
toast.error(`${error}`);
await loadChat();
});
onToolCallResolved(res);
};
$: pendingAskUser = findPendingAskUser(history);
@ -658,6 +660,13 @@
}
};
const onToolCallResolved = (res) => {
const newTaskIds = res?.task_ids ?? (res?.task_id ? [res.task_id] : []);
if (newTaskIds.length > 0) {
taskIds = [...(taskIds ?? []), ...newTaskIds];
}
};
let oldSelectedModelIds = [''];
$: if (!equal(selectedModelIds, oldSelectedModelIds)) {
onSelectedModelIdsChange();
@ -3568,10 +3577,7 @@
await handleOpenAIError(res.error, responseMessage);
} else {
// Backend returns task_ids (multi-model) or task_id (single model)
const newTaskIds = res.task_ids ?? (res.task_id ? [res.task_id] : []);
if (newTaskIds.length > 0) {
taskIds = [...(taskIds ?? []), ...newTaskIds];
}
onToolCallResolved(res);
// Backend returns chat_id for new chats — set store + URL.
// Only update if the user hasn't navigated to a different chat
@ -4287,6 +4293,7 @@
{mergeResponses}
{chatActionHandler}
{addMessages}
{onToolCallResolved}
allowDelete={!(generating || taskIds?.length)}
forkHandler={handleForkChat}
topPadding={!embedded}

View file

@ -40,6 +40,7 @@
export let showMessage: Function = () => {};
export let submitMessage: Function = () => {};
export let addMessages: Function = () => {};
export let onToolCallResolved: Function = () => {};
export let forkHandler: Function | null = null;
export let readOnly = false;
@ -555,6 +556,7 @@
{continueResponse}
{mergeResponses}
{addMessages}
{onToolCallResolved}
{forkHandler}
{allowDelete}
{triggerScroll}

View file

@ -93,6 +93,7 @@
export let onSave = (e) => {};
export let onSourceClick = (e) => {};
export let onTaskClick = (e) => {};
export let onToolCallResolved = (e) => {};
export let onSetInputText = (text) => {};
let contentContainerElement;
@ -299,6 +300,7 @@
{formatMessageContent}
{onSourceClick}
{onTaskClick}
{onToolCallResolved}
{onSave}
onUpdate={markdownUpdateHandler}
onPreview={previewHandler}
@ -320,6 +322,7 @@
{sourceIds}
{onSourceClick}
{onTaskClick}
{onToolCallResolved}
{onSave}
onUpdate={markdownUpdateHandler}
onPreview={previewHandler}
@ -340,6 +343,7 @@
{preview}
{compactPreview}
{done}
{onToolCallResolved}
/>
</div>
{/if}

View file

@ -54,6 +54,7 @@
export let onTaskClick: Function = () => {};
export let onSourceClick: Function = () => {};
export let onToolCallResolved: Function = () => {};
const headerComponent = (depth: number) => {
return 'h' + depth;
@ -111,13 +112,14 @@
resolvingCallId = callId;
try {
await resolveChatMessageToolCall(
const res = await resolveChatMessageToolCall(
localStorage.token,
chatId,
messageId,
callId,
approved ? 'approve' : 'reject'
);
onToolCallResolved(res);
} catch (err) {
toast.error(String(err));
} finally {
@ -314,10 +316,11 @@
{preview}
{compactPreview}
{editCodeBlock}
{onTaskClick}
{sourceIds}
{onSourceClick}
/>
{onTaskClick}
{sourceIds}
{onSourceClick}
{onToolCallResolved}
/>
</blockquote>
{/if}
{:else if token.type === 'list'}

View file

@ -39,6 +39,7 @@
export let mergeResponses;
export let addMessages;
export let onToolCallResolved: Function = () => {};
export let forkHandler: Function | null = null;
export let triggerScroll;
export let readOnly = false;
@ -107,6 +108,7 @@
{continueResponse}
{regenerateResponse}
{addMessages}
{onToolCallResolved}
{forkHandler}
{readOnly}
{compactPreview}
@ -135,6 +137,7 @@
{mergeResponses}
{triggerScroll}
{addMessages}
{onToolCallResolved}
{forkHandler}
{readOnly}
{compactPreview}

View file

@ -48,6 +48,7 @@
export let mergeResponses: Function;
export let addMessages: Function;
export let onToolCallResolved: Function = () => {};
export let forkHandler: Function | null = null;
export let triggerScroll: Function;
@ -328,6 +329,7 @@
groupedMessageIds[selectedModelIdx].messageIds.length - 1;
}}
{addMessages}
{onToolCallResolved}
{forkHandler}
{readOnly}
{compactPreview}
@ -391,6 +393,7 @@
groupedMessageIds[modelIdx].messageIds.length - 1;
}}
{addMessages}
{onToolCallResolved}
{forkHandler}
{readOnly}
{compactPreview}

View file

@ -160,6 +160,7 @@
export let forkHandler: Function | null = null;
export let addMessages: Function;
export let onToolCallResolved: Function = () => {};
export let isLastMessage = true;
export let readOnly = false;
@ -835,6 +836,7 @@
onTaskClick={async (e) => {
console.log(e);
}}
{onToolCallResolved}
onSourceClick={async (id) => {
console.log(id);

View file

@ -33,6 +33,7 @@
export let onTaskClick: any = () => {};
export let onUpdate: any = () => {};
export let onPreview: any = () => {};
export let onToolCallResolved: any = () => {};
const getDetailTitle = (detailToken: OutputDetailToken): any => detailToken.summary;
const getDetailAttributes = (detailToken: OutputDetailToken): any => detailToken.attributes;
@ -45,13 +46,14 @@
resolvingCallId = callId;
try {
await resolveChatMessageToolCall(
const res = await resolveChatMessageToolCall(
localStorage.token,
chatId,
messageId,
callId,
approved ? 'approve' : 'reject'
);
onToolCallResolved(res);
} catch (err) {
toast.error(String(err));
} finally {
@ -85,6 +87,7 @@
{sourceIds}
{onSourceClick}
{onTaskClick}
{onToolCallResolved}
{onSave}
{onUpdate}
{onPreview}
@ -139,6 +142,7 @@
{preview}
{compactPreview}
{editCodeBlock}
{onToolCallResolved}
/>
</div>
</div>
@ -189,10 +193,11 @@
content={detailToken.text}
{done}
{save}
{preview}
{compactPreview}
{editCodeBlock}
/>
{preview}
{compactPreview}
{editCodeBlock}
{onToolCallResolved}
/>
</div>
</div>
</Collapsible>