Message.svelte 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <script lang="ts">
  2. import { toast } from 'svelte-sonner';
  3. import { tick, getContext, onMount, createEventDispatcher } from 'svelte';
  4. const dispatch = createEventDispatcher();
  5. const i18n = getContext('i18n');
  6. import { settings } from '$lib/stores';
  7. import { copyToClipboard } from '$lib/utils';
  8. import MultiResponseMessages from './MultiResponseMessages.svelte';
  9. import ResponseMessage from './ResponseMessage.svelte';
  10. import UserMessage from './UserMessage.svelte';
  11. export let chatId;
  12. export let selectedModels = [];
  13. export let idx = 0;
  14. export let history;
  15. export let messageId;
  16. export let user;
  17. export let setInputText: Function = () => {};
  18. export let gotoMessage;
  19. export let showPreviousMessage;
  20. export let showNextMessage;
  21. export let updateChat;
  22. export let editMessage;
  23. export let saveMessage;
  24. export let deleteMessage;
  25. export let rateMessage;
  26. export let actionMessage;
  27. export let submitMessage;
  28. export let regenerateResponse;
  29. export let continueResponse;
  30. export let mergeResponses;
  31. export let addMessages;
  32. export let triggerScroll;
  33. export let readOnly = false;
  34. </script>
  35. <div
  36. class="flex flex-col justify-between px-5 mb-3 w-full {($settings?.widescreenMode ?? null)
  37. ? 'max-w-full'
  38. : 'max-w-5xl'} mx-auto rounded-lg group"
  39. >
  40. {#if history.messages[messageId]}
  41. {#if history.messages[messageId].role === 'user'}
  42. <UserMessage
  43. {user}
  44. {history}
  45. {messageId}
  46. isFirstMessage={idx === 0}
  47. siblings={history.messages[messageId].parentId !== null
  48. ? (history.messages[history.messages[messageId].parentId]?.childrenIds ?? [])
  49. : (Object.values(history.messages)
  50. .filter((message) => message.parentId === null)
  51. .map((message) => message.id) ?? [])}
  52. {gotoMessage}
  53. {showPreviousMessage}
  54. {showNextMessage}
  55. {editMessage}
  56. {deleteMessage}
  57. {readOnly}
  58. />
  59. {:else if (history.messages[history.messages[messageId].parentId]?.models?.length ?? 1) === 1}
  60. <ResponseMessage
  61. {chatId}
  62. {history}
  63. {messageId}
  64. {selectedModels}
  65. isLastMessage={messageId === history.currentId}
  66. siblings={history.messages[history.messages[messageId].parentId]?.childrenIds ?? []}
  67. {setInputText}
  68. {gotoMessage}
  69. {showPreviousMessage}
  70. {showNextMessage}
  71. {updateChat}
  72. {editMessage}
  73. {saveMessage}
  74. {rateMessage}
  75. {actionMessage}
  76. {submitMessage}
  77. {deleteMessage}
  78. {continueResponse}
  79. {regenerateResponse}
  80. {addMessages}
  81. {readOnly}
  82. />
  83. {:else}
  84. <MultiResponseMessages
  85. bind:history
  86. {chatId}
  87. {messageId}
  88. {selectedModels}
  89. isLastMessage={messageId === history?.currentId}
  90. {setInputText}
  91. {updateChat}
  92. {editMessage}
  93. {saveMessage}
  94. {rateMessage}
  95. {actionMessage}
  96. {submitMessage}
  97. {deleteMessage}
  98. {continueResponse}
  99. {regenerateResponse}
  100. {mergeResponses}
  101. {triggerScroll}
  102. {addMessages}
  103. {readOnly}
  104. />
  105. {/if}
  106. {/if}
  107. </div>