{#if message.from === "assistant"}
(isTapped = !isTapped)} onkeydown={() => (isTapped = !isTapped)} >
{#if message.files?.length}
{#each message.files as file (file.value)}
{/each}
{/if}
{#if isLast && loading && blocks.length === 0}
{/if} {#each blocks as block, blockIndex (block.type === "tool" ? `${block.uuid}-${blockIndex}` : `text-${blockIndex}`)} {@const nextBlock = blocks[blockIndex + 1]} {@const nextBlockHasThink = nextBlock?.type === "text" && THINK_BLOCK_TEST_REGEX.test(nextBlock.content)} {@const nextIsLinkable = nextBlock?.type === "tool" || nextBlockHasThink} {#if block.type === "tool"}
{:else if block.type === "text"} {#if isLast && loading && block.content.length === 0}
{/if} {#if hasClientThink} {@const parts = block.content.split(THINK_BLOCK_REGEX)} {#each parts as part, partIndex} {@const remainingParts = parts.slice(partIndex + 1)} {@const hasMoreLinkable = remainingParts.some((p) => p && THINK_BLOCK_TEST_REGEX.test(p)) || nextIsLinkable} {#if part && part.startsWith("
")} {@const isClosed = part.endsWith("
")} {@const thinkContent = part.slice(7, isClosed ? -8 : undefined)}
{:else if part && part.trim().length > 0}
{/if} {/each} {:else}
{/if} {/if} {/each}
{#if message.routerMetadata || (!loading && message.content)}
{#if message.routerMetadata && (message.routerMetadata.route || message.routerMetadata.model || message.routerMetadata.provider) && (!isLast || !loading)}
{#if message.routerMetadata.route && message.routerMetadata.model}
{message.routerMetadata.route}
with
{#if publicConfig.isHuggingChat}
{message.routerMetadata.model.split("/").pop()}
{:else}
{message.routerMetadata.model.split("/").pop()}
{/if} {/if} {#if message.routerMetadata.provider} {@const hubOrg = PROVIDERS_HUB_ORGS[message.routerMetadata.provider]}
via
((e.currentTarget as HTMLImageElement).style.display = "none")} /> {message.routerMetadata.provider}
{/if}
{/if} {#if !isLast || !loading}
{ isCopied = true; }} classNames="btn rounded-sm p-1 text-sm text-gray-400 hover:text-gray-500 focus:ring-0 dark:text-gray-400 dark:hover:text-gray-300" value={contentWithoutThink} iconClassNames="text-xs" />
{ onretry?.({ id: message.id }); }} >
{#if alternatives.length > 1 && editMsdgId === null}
onshowAlternateMsg?.(payload)} /> {/if} {/if}
{/if}
{/if} {#if message.from === "user"}
(isTapped = !isTapped)} onkeydown={() => (isTapped = !isTapped)} >
{#if message.files?.length}
{#each message.files as file}
{/each}
{/if}
{#if !editMode}
{message.content.trim()}
{:else}
{ e.preventDefault(); onretry?.({ content: editContentEl?.value, id: message.id }); editMsdgId = null; }} >
Send
{ editMsdgId = null; }} > Cancel
{/if}
{#if alternatives.length > 1 && editMsdgId === null}
onshowAlternateMsg?.(payload)} /> {/if} {#if (alternatives.length > 1 && editMsdgId === null) || (!loading && !editMode)}
{ if (requireAuthUser()) return; editMsdgId = message.id; }} >
Edit
{/if}
{/if}