123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <script lang="ts">
- import { toast } from 'svelte-sonner';
- import { tick, getContext, onMount, createEventDispatcher } from 'svelte';
- const dispatch = createEventDispatcher();
- const i18n = getContext('i18n');
- import { settings } from '$lib/stores';
- import { copyToClipboard } from '$lib/utils';
- import MultiResponseMessages from './MultiResponseMessages.svelte';
- import ResponseMessage from './ResponseMessage.svelte';
- import UserMessage from './UserMessage.svelte';
- export let chatId;
- export let idx = 0;
- export let history;
- export let messageId;
- export let user;
- export let showPreviousMessage;
- export let showNextMessage;
- export let editMessage;
- export let deleteMessage;
- export let rateMessage;
- export let regenerateResponse;
- export let continueResponse;
- // MultiResponseMessages
- export let mergeResponses;
- export let autoScroll = false;
- export let readOnly = false;
- onMount(() => {
- // console.log('message', idx);
- });
- </script>
- <div
- class="flex flex-col justify-between px-5 mb-3 w-full {($settings?.widescreenMode ?? null)
- ? 'max-w-full'
- : 'max-w-5xl'} mx-auto rounded-lg group"
- >
- {#if history.messages[messageId]}
- {#if history.messages[messageId].role === 'user'}
- <UserMessage
- {user}
- {history}
- {messageId}
- isFirstMessage={idx === 0}
- siblings={history.messages[messageId].parentId !== null
- ? (history.messages[history.messages[messageId].parentId]?.childrenIds ?? [])
- : (Object.values(history.messages)
- .filter((message) => message.parentId === null)
- .map((message) => message.id) ?? [])}
- {showPreviousMessage}
- {showNextMessage}
- {editMessage}
- on:delete={() => deleteMessage(messageId)}
- {readOnly}
- />
- {:else if (history.messages[history.messages[messageId].parentId]?.models?.length ?? 1) === 1}
- <ResponseMessage
- {chatId}
- {history}
- {messageId}
- isLastMessage={messageId === history.currentId}
- siblings={history.messages[history.messages[messageId].parentId]?.childrenIds ?? []}
- {showPreviousMessage}
- {showNextMessage}
- {editMessage}
- {rateMessage}
- {continueResponse}
- {regenerateResponse}
- on:submit={async (e) => {
- dispatch('submit', e.detail);
- }}
- on:action={async (e) => {
- dispatch('action', e.detail);
- }}
- on:update={async (e) => {
- dispatch('update');
- }}
- on:save={async (e) => {
- console.log('save', e);
- const message = e.detail;
- if (message) {
- history.messages[message.id] = message;
- dispatch('update');
- } else {
- dispatch('update');
- }
- }}
- {readOnly}
- />
- {:else}
- <MultiResponseMessages
- bind:history
- {chatId}
- {messageId}
- isLastMessage={messageId === history?.currentId}
- {rateMessage}
- {editMessage}
- {continueResponse}
- {regenerateResponse}
- {mergeResponses}
- on:submit={async (e) => {
- dispatch('submit', e.detail);
- }}
- on:action={async (e) => {
- dispatch('action', e.detail);
- }}
- on:update={async (e) => {
- dispatch('update');
- }}
- on:save={async (e) => {
- console.log('save', e);
- const message = e.detail;
- if (message) {
- history.messages[message.id] = message;
- dispatch('update');
- } else {
- dispatch('update');
- }
- }}
- on:change={async () => {
- await tick();
- dispatch('update');
- dispatch('scroll');
- }}
- {readOnly}
- />
- {/if}
- {/if}
- </div>
|