{ deleteMessageHandler(); }} /> {#key message.id}
{#if !compactPreview} {model?.name ?? message.model} {/if}
{#if model?.info?.meta?.capabilities?.status_updates ?? true} {/if} {#if message?.files && message.files?.filter( (f) => ['image', 'file'].includes(f.type) ).length > 0}
{#each message.files.filter((f) => ['image', 'file'].includes(f.type)) as file}
{#if file.type === 'image' || (file?.content_type ?? '').startsWith('image/')} {file.name {:else} {/if}
{/each}
{/if} {#if message?.embeds && message.embeds.length > 0}
{#each message.embeds as embed, idx}
{/each}
{/if} {#if edit === true}
{#if editedOutput} { editedOutput = updated; }} /> {:else} {/if}
{/if}
{#if hasResponseContent && message.error !== true} { console.log(e); }} {onToolCallResolved} onSourceClick={async (id) => { console.log(id); if (citationsElement) { citationsElement?.showSourceModal(id); } }} onSetInputText={(text) => { setInputText(text); }} onSave={({ raw, oldContent, newContent }) => { const sourceMessage = history.messages[message.id]; if (sourceMessage.output?.length) { const updatedOutput = replaceOutputMessageText( sourceMessage.output, oldContent, newContent ); if (updatedOutput !== sourceMessage.output) { sourceMessage.output = updatedOutput; } else { sourceMessage.content = sourceMessage.content.replace( raw, raw.replace(oldContent, newContent) ); } } else { sourceMessage.content = sourceMessage.content.replace( raw, raw.replace(oldContent, newContent) ); } updateChat(); }} /> {/if} {#if !message.done && !message.error && (hasResponseContent || !hasVisibleStatus)}
{/if} {#if message?.error} {/if} {#if (message?.sources || message?.citations) && (model?.info?.meta?.capabilities?.citations ?? true)} {/if} {#if message.code_executions} {/if}
{#if compactPreview && message.timestamp}
{:else if !edit}
{#if message.done || siblings.length > 1} {#if siblings.length > 1}
{#if messageIndexEdit}
{ e.target.select(); }} on:blur={(e) => { gotoMessage(message, e.target.value - 1); messageIndexEdit = false; }} on:keydown={(e) => { if (e.key === 'Enter') { gotoMessage(message, e.target.value - 1); messageIndexEdit = false; } }} class="bg-transparent font-normal self-center dark:text-gray-100 min-w-fit outline-hidden" />/{siblings.length}
{:else}
{ messageIndexEdit = true; await tick(); const input = document.getElementById(`message-index-input-${message.id}`); if (input) { input.focus(); input.select(); } }} > {siblings.indexOf(message.id) + 1}/{siblings.length}
{/if}
{/if} {#if message.done} {#if !readOnly} {#if $user?.role === 'user' ? ($user?.permissions?.chat?.edit ?? true) : true} {/if} {/if} {#if onInsertToNote && visibleResponseContent} {/if} {#if !readOnly && ($user?.role === 'admin' || ($user?.permissions?.chat?.tts ?? true))} {/if} {#if message.usage} ${sanitizeResponseContent( JSON.stringify(message.usage, null, 2) .replace(/"([^(")"]+)":/g, '$1:') .slice(1, -1) .split('\n') .map((line) => line.slice(2)) .map((line) => (line.endsWith(',') ? line.slice(0, -1) : line)) .join('\n') )}` : ''} placement="bottom" > {/if} {#if !readOnly} {#if !$temporaryChatEnabled && ($config?.features.enable_message_rating ?? true) && ($user?.role === 'admin' || ($user?.permissions?.chat?.rate_response ?? true))} {/if} {#if isLastMessage && ($user?.role === 'admin' || ($user?.permissions?.chat?.continue_response ?? true))} {/if} {#if $user?.role === 'admin' || ($user?.permissions?.chat?.regenerate_response ?? true)} {#if $settings?.regenerateMenu ?? true} {:else} {/if} {/if} {#each model?.actions ?? [] as action} {/each} {#if message.done && !readOnly && forkHandler && ($user?.role === 'admin' || ($user?.permissions?.chat?.import ?? true))} {/if} {#if $user?.role === 'admin' || ($user?.permissions?.chat?.delete_message ?? true)} {#if siblings.length > 1} {/if} {/if} {#if message.timestamp} {/if} {/if} {/if} {/if}
{#if message.done && showRateComment} { await feedbackHandler(null, { ...e.detail }); }} /> {/if} {#if (isLastMessage || ($settings?.keepFollowUpPrompts ?? false)) && message.done && !readOnly && (message?.followUps ?? []).length > 0}
{ if ($settings?.insertFollowUpPrompt ?? false) { // Insert the follow-up prompt into the input box setInputText(prompt); } else { // Submit the follow-up prompt directly submitMessage(message?.id, prompt); } }} />
{/if} {/if}
{/key}