fix(chat): attribute shared chat messages to their author, not the viewer (#28274)
This commit is contained in:
4 files changed
+29
-3
No files matched your search
@@ -82,7 +82,7 @@
|
|||||||
} from '$lib/apis/chats';
|
} from '$lib/apis/chats';
|
||||||
import { generateOpenAIChatCompletion } from '$lib/apis/openai';
|
import { generateOpenAIChatCompletion } from '$lib/apis/openai';
|
||||||
import { processUrl, processWebSearch } from '$lib/apis/retrieval';
|
import { processUrl, processWebSearch } from '$lib/apis/retrieval';
|
||||||
import { getAndUpdateUserLocation, getUserSettings } from '$lib/apis/users';
|
import { getAndUpdateUserLocation, getUserInfoById, getUserSettings } from '$lib/apis/users';
|
||||||
import {
|
import {
|
||||||
generateQueries,
|
generateQueries,
|
||||||
chatAction,
|
chatAction,
|
||||||
@@ -372,6 +372,25 @@
|
|||||||
// Read-only when viewing someone else's chat (e.g. via shared folder access)
|
// Read-only when viewing someone else's chat (e.g. via shared folder access)
|
||||||
$: readOnly = chat != null && chat.user_id !== $user?.id;
|
$: readOnly = chat != null && chat.user_id !== $user?.id;
|
||||||
|
|
||||||
|
let chatOwner = null;
|
||||||
|
|
||||||
|
const resolveChatOwner = async (userId) => {
|
||||||
|
if (chatOwner?.id === userId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
chatOwner = await getUserInfoById(localStorage.token, userId).catch((error) => {
|
||||||
|
console.error(error);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
$: if (readOnly && chat?.user_id) {
|
||||||
|
void resolveChatOwner(chat.user_id);
|
||||||
|
} else {
|
||||||
|
chatOwner = null;
|
||||||
|
}
|
||||||
|
|
||||||
let chatTasks = [];
|
let chatTasks = [];
|
||||||
|
|
||||||
let history = {
|
let history = {
|
||||||
@@ -4067,6 +4086,7 @@
|
|||||||
<Messages
|
<Messages
|
||||||
bind:this={messagesRef}
|
bind:this={messagesRef}
|
||||||
chatId={$chatId}
|
chatId={$chatId}
|
||||||
|
user={chatOwner ?? $user}
|
||||||
{readOnly}
|
{readOnly}
|
||||||
bind:history
|
bind:history
|
||||||
bind:autoScroll
|
bind:autoScroll
|
||||||
@@ -4304,6 +4324,7 @@
|
|||||||
bind:files
|
bind:files
|
||||||
bind:pane={controlPane}
|
bind:pane={controlPane}
|
||||||
chatId={$chatId}
|
chatId={$chatId}
|
||||||
|
chatUser={chatOwner}
|
||||||
modelId={selectedModelIds?.at(0) ?? null}
|
modelId={selectedModelIds?.at(0) ?? null}
|
||||||
models={selectedModelIds.reduce((a, e, i, arr) => {
|
models={selectedModelIds.reduce((a, e, i, arr) => {
|
||||||
const model = $models.find((m) => m.id === e);
|
const model = $models.find((m) => m.id === e);
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
export let models = [];
|
export let models = [];
|
||||||
|
|
||||||
export let chatId = null;
|
export let chatId = null;
|
||||||
|
export let chatUser = null;
|
||||||
|
|
||||||
export let chatFiles = [];
|
export let chatFiles = [];
|
||||||
export let params = {};
|
export let params = {};
|
||||||
@@ -385,6 +386,7 @@
|
|||||||
{#if activeTab === 'overview'}
|
{#if activeTab === 'overview'}
|
||||||
<Overview
|
<Overview
|
||||||
{history}
|
{history}
|
||||||
|
{chatUser}
|
||||||
onNodeClick={(e) => {
|
onNodeClick={(e) => {
|
||||||
const node = e.node;
|
const node = e.node;
|
||||||
showMessage(node.data.message, true);
|
showMessage(node.data.message, true);
|
||||||
@@ -529,6 +531,7 @@
|
|||||||
{#if activeTab === 'overview'}
|
{#if activeTab === 'overview'}
|
||||||
<Overview
|
<Overview
|
||||||
{history}
|
{history}
|
||||||
|
{chatUser}
|
||||||
onNodeClick={(e) => {
|
onNodeClick={(e) => {
|
||||||
const node = e.node;
|
const node = e.node;
|
||||||
if (node?.data?.message?.favorite) {
|
if (node?.data?.message?.favorite) {
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
export let history;
|
export let history;
|
||||||
export let onNodeClick;
|
export let onNodeClick;
|
||||||
|
export let chatUser = null;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SvelteFlowProvider>
|
<SvelteFlowProvider>
|
||||||
<View {history} {onNodeClick} />
|
<View {history} {onNodeClick} {chatUser} />
|
||||||
</SvelteFlowProvider>
|
</SvelteFlowProvider>
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
export let history;
|
export let history;
|
||||||
export let onNodeClick;
|
export let onNodeClick;
|
||||||
|
export let chatUser = null;
|
||||||
|
|
||||||
type LayoutDirection = 'vertical' | 'horizontal';
|
type LayoutDirection = 'vertical' | 'horizontal';
|
||||||
type PositionMapEntry = {
|
type PositionMapEntry = {
|
||||||
@@ -99,7 +100,7 @@
|
|||||||
id: pos.id,
|
id: pos.id,
|
||||||
type: 'custom',
|
type: 'custom',
|
||||||
data: {
|
data: {
|
||||||
user: $user,
|
user: chatUser ?? $user,
|
||||||
message: history.messages[id],
|
message: history.messages[id],
|
||||||
model: $models.find((model) => model.id === history.messages[id].model)
|
model: $models.find((model) => model.id === history.messages[id].model)
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in new issue
Block a user