mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-12 04:15:25 +00:00
refac/enh: channel message
This commit is contained in:
parent
b9e849f17d
commit
25994dd3da
6 changed files with 32 additions and 7 deletions
|
|
@ -90,6 +90,7 @@ class MessageModel(BaseModel):
|
||||||
|
|
||||||
|
|
||||||
class MessageForm(BaseModel):
|
class MessageForm(BaseModel):
|
||||||
|
temp_id: Optional[str] = None
|
||||||
content: str
|
content: str
|
||||||
reply_to_id: Optional[str] = None
|
reply_to_id: Optional[str] = None
|
||||||
parent_id: Optional[str] = None
|
parent_id: Optional[str] = None
|
||||||
|
|
|
||||||
|
|
@ -765,7 +765,7 @@ async def new_message_handler(
|
||||||
"message_id": message.id,
|
"message_id": message.id,
|
||||||
"data": {
|
"data": {
|
||||||
"type": "message",
|
"type": "message",
|
||||||
"data": message.model_dump(),
|
"data": {"temp_id": form_data.temp_id, **message.model_dump()},
|
||||||
},
|
},
|
||||||
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
"user": UserNameResponse(**user.model_dump()).model_dump(),
|
||||||
"channel": channel.model_dump(),
|
"channel": channel.model_dump(),
|
||||||
|
|
|
||||||
|
|
@ -378,6 +378,7 @@ export const getChannelThreadMessages = async (
|
||||||
};
|
};
|
||||||
|
|
||||||
type MessageForm = {
|
type MessageForm = {
|
||||||
|
temp_id?: string;
|
||||||
reply_to_id?: string;
|
reply_to_id?: string;
|
||||||
parent_id?: string;
|
parent_id?: string;
|
||||||
content: string;
|
content: string;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
import { onDestroy, onMount, tick } from 'svelte';
|
import { onDestroy, onMount, tick } from 'svelte';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
chatId,
|
chatId,
|
||||||
|
|
@ -118,7 +119,8 @@
|
||||||
|
|
||||||
if (type === 'message') {
|
if (type === 'message') {
|
||||||
if ((data?.parent_id ?? null) === null) {
|
if ((data?.parent_id ?? null) === null) {
|
||||||
messages = [data, ...messages];
|
const tempId = data?.temp_id ?? null;
|
||||||
|
messages = [{ ...data, temp_id: null }, ...messages.filter((m) => m?.temp_id !== tempId)];
|
||||||
|
|
||||||
if (typingUsers.find((user) => user.id === event.user.id)) {
|
if (typingUsers.find((user) => user.id === event.user.id)) {
|
||||||
typingUsers = typingUsers.filter((user) => user.id !== event.user.id);
|
typingUsers = typingUsers.filter((user) => user.id !== event.user.id);
|
||||||
|
|
@ -183,11 +185,30 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await sendMessage(localStorage.token, id, {
|
const tempId = uuidv4();
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
temp_id: tempId,
|
||||||
content: content,
|
content: content,
|
||||||
data: data,
|
data: data,
|
||||||
reply_to_id: replyToMessage?.id ?? null
|
reply_to_id: replyToMessage?.id ?? null
|
||||||
}).catch((error) => {
|
};
|
||||||
|
|
||||||
|
const ts = Date.now() * 1000000; // nanoseconds
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
...message,
|
||||||
|
id: tempId,
|
||||||
|
user_id: $user?.id,
|
||||||
|
user: $user,
|
||||||
|
reply_to_message: replyToMessage ?? null,
|
||||||
|
created_at: ts,
|
||||||
|
updated_at: ts
|
||||||
|
},
|
||||||
|
...messages
|
||||||
|
];
|
||||||
|
|
||||||
|
const res = await sendMessage(localStorage.token, id, message).catch((error) => {
|
||||||
toast.error(`${error}`);
|
toast.error(`${error}`);
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -128,11 +128,12 @@
|
||||||
{message}
|
{message}
|
||||||
{thread}
|
{thread}
|
||||||
replyToMessage={replyToMessage?.id === message.id}
|
replyToMessage={replyToMessage?.id === message.id}
|
||||||
disabled={!channel?.write_access}
|
disabled={!channel?.write_access || message?.temp_id}
|
||||||
|
pending={!!message?.temp_id}
|
||||||
showUserProfile={messageIdx === 0 ||
|
showUserProfile={messageIdx === 0 ||
|
||||||
messageList.at(messageIdx - 1)?.user_id !== message.user_id ||
|
messageList.at(messageIdx - 1)?.user_id !== message.user_id ||
|
||||||
messageList.at(messageIdx - 1)?.meta?.model_id !== message?.meta?.model_id ||
|
messageList.at(messageIdx - 1)?.meta?.model_id !== message?.meta?.model_id ||
|
||||||
message?.reply_to_message}
|
message?.reply_to_message !== null}
|
||||||
onDelete={() => {
|
onDelete={() => {
|
||||||
messages = messages.filter((m) => m.id !== message.id);
|
messages = messages.filter((m) => m.id !== message.id);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@
|
||||||
|
|
||||||
export let replyToMessage = false;
|
export let replyToMessage = false;
|
||||||
export let disabled = false;
|
export let disabled = false;
|
||||||
|
export let pending = false;
|
||||||
|
|
||||||
export let onDelete: Function = () => {};
|
export let onDelete: Function = () => {};
|
||||||
export let onEdit: Function = () => {};
|
export let onEdit: Function = () => {};
|
||||||
|
|
@ -380,7 +381,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class=" min-w-full markdown-prose">
|
<div class=" min-w-full markdown-prose {pending ? 'opacity-50' : ''}">
|
||||||
{#if (message?.content ?? '').trim() === '' && message?.meta?.model_id}
|
{#if (message?.content ?? '').trim() === '' && message?.meta?.model_id}
|
||||||
<Skeleton />
|
<Skeleton />
|
||||||
{:else}
|
{:else}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue