{#if history.messages[messageId].role === 'user'} {@const message = history.messages[messageId]} message.parentId === null) .map((message) => message.id) ?? [])} {confirmEditMessage} {showPreviousMessage} {showNextMessage} copyToClipboard={copyToClipboardWithToast} isFirstMessage={messageIdx === 0} on:delete={() => deleteMessage(message.id)} {readOnly} /> {:else if (history.messages[message.parentId]?.models?.length ?? 1) === 1} { console.log('action', e); if (typeof e.detail === 'string') { await chatActionHandler(chatId, e.detail, message.model, message.id); } else { const { id, event } = e.detail; await chatActionHandler(chatId, id, message.model, message.id, event); } }} on:save={async (e) => { console.log('save', e); const message = e.detail; if (message) { history.messages[message.id] = message; await updateChatById(localStorage.token, chatId, { history: history }); } else { await updateChatById(localStorage.token, chatId, { history: history }); } }} /> {:else} { console.log('action', e); if (typeof e.detail === 'string') { await chatActionHandler(chatId, e.detail, message.model, message.id); } else { const { id, event } = e.detail; await chatActionHandler(chatId, id, message.model, message.id, event); } }} on:change={async () => { await updateChatById(localStorage.token, chatId, { history: history }); if (autoScroll) { const element = document.getElementById('messages-container'); autoScroll = element.scrollHeight - element.scrollTop <= element.clientHeight + 50; setTimeout(() => { scrollToBottom(); }, 100); } }} /> {/if}