mirror of
https://github.com/open-webui/open-webui
synced 2025-06-10 08:27:55 +00:00
fix: display username in shared chats
This commit is contained in:
parent
75491b2f87
commit
a8b92e5e9d
@ -12,7 +12,7 @@ import logging
|
|||||||
from apps.web.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users
|
from apps.web.models.users import UserModel, UserUpdateForm, UserRoleUpdateForm, Users
|
||||||
from apps.web.models.auths import Auths
|
from apps.web.models.auths import Auths
|
||||||
|
|
||||||
from utils.utils import get_current_user, get_password_hash, get_admin_user
|
from utils.utils import get_verified_user, get_password_hash, get_admin_user
|
||||||
from constants import ERROR_MESSAGES
|
from constants import ERROR_MESSAGES
|
||||||
|
|
||||||
from config import SRC_LOG_LEVELS
|
from config import SRC_LOG_LEVELS
|
||||||
@ -67,6 +67,30 @@ async def update_user_role(form_data: UserRoleUpdateForm, user=Depends(get_admin
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
############################
|
||||||
|
# GetUserById
|
||||||
|
############################
|
||||||
|
|
||||||
|
|
||||||
|
class UserResponse(BaseModel):
|
||||||
|
name: str
|
||||||
|
profile_image_url: str
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/{user_id}", response_model=UserResponse)
|
||||||
|
async def get_user_by_id(user_id: str, user=Depends(get_verified_user)):
|
||||||
|
|
||||||
|
user = Users.get_user_by_id(user_id)
|
||||||
|
|
||||||
|
if user:
|
||||||
|
return UserResponse(name=user.name, profile_image_url=user.profile_image_url)
|
||||||
|
else:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
|
detail=ERROR_MESSAGES.USER_NOT_FOUND,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
############################
|
############################
|
||||||
# UpdateUserById
|
# UpdateUserById
|
||||||
############################
|
############################
|
||||||
|
@ -115,6 +115,33 @@ export const getUsers = async (token: string) => {
|
|||||||
return res ? res : [];
|
return res ? res : [];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getUserById = async (token: string, userId: string) => {
|
||||||
|
let error = null;
|
||||||
|
|
||||||
|
const res = await fetch(`${WEBUI_API_BASE_URL}/users/${userId}`, {
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(async (res) => {
|
||||||
|
if (!res.ok) throw await res.json();
|
||||||
|
return res.json();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
error = err.detail;
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
|
||||||
export const deleteUserById = async (token: string, userId: string) => {
|
export const deleteUserById = async (token: string, userId: string) => {
|
||||||
let error = null;
|
let error = null;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
import { chats, config, modelfiles, settings, user } from '$lib/stores';
|
import { chats, config, modelfiles, settings, user as _user } from '$lib/stores';
|
||||||
import { tick, getContext } from 'svelte';
|
import { tick, getContext } from 'svelte';
|
||||||
|
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
@ -22,6 +22,7 @@
|
|||||||
export let continueGeneration: Function;
|
export let continueGeneration: Function;
|
||||||
export let regenerateResponse: Function;
|
export let regenerateResponse: Function;
|
||||||
|
|
||||||
|
export let user = $_user;
|
||||||
export let prompt;
|
export let prompt;
|
||||||
export let suggestionPrompts = [];
|
export let suggestionPrompts = [];
|
||||||
export let processing = '';
|
export let processing = '';
|
||||||
@ -294,7 +295,7 @@
|
|||||||
{#if message.role === 'user'}
|
{#if message.role === 'user'}
|
||||||
<UserMessage
|
<UserMessage
|
||||||
on:delete={() => messageDeleteHandler(message.id)}
|
on:delete={() => messageDeleteHandler(message.id)}
|
||||||
user={$user}
|
{user}
|
||||||
{readOnly}
|
{readOnly}
|
||||||
{message}
|
{message}
|
||||||
isFirstMessage={messageIdx === 0}
|
isFirstMessage={messageIdx === 0}
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
import { modelfiles, settings } from '$lib/stores';
|
import { modelfiles, settings } from '$lib/stores';
|
||||||
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
import Tooltip from '$lib/components/common/Tooltip.svelte';
|
||||||
|
|
||||||
|
import { user as _user } from '$lib/stores';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
@ -74,7 +76,7 @@
|
|||||||
{$i18n.t('You')}
|
{$i18n.t('You')}
|
||||||
<span class=" text-gray-500 text-sm font-medium">{message?.user ?? ''}</span>
|
<span class=" text-gray-500 text-sm font-medium">{message?.user ?? ''}</span>
|
||||||
{/if}
|
{/if}
|
||||||
{:else if $settings.showUsername}
|
{:else if $settings.showUsername || $_user.name !== user.name}
|
||||||
{user.name}
|
{user.name}
|
||||||
{:else}
|
{:else}
|
||||||
{$i18n.t('You')}
|
{$i18n.t('You')}
|
||||||
|
@ -63,7 +63,7 @@
|
|||||||
<div class="mt-3 mb-1 ml-1">
|
<div class="mt-3 mb-1 ml-1">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-gray-300 dark:outline-gray-800 rounded-3xl"
|
class=" px-3.5 py-1.5 font-medium hover:bg-black/5 dark:hover:bg-white/5 outline outline-1 outline-gray-300 dark:outline-gray-800 rounded-3xl"
|
||||||
>
|
>
|
||||||
Manage
|
Manage
|
||||||
</button>
|
</button>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
import Messages from '$lib/components/chat/Messages.svelte';
|
import Messages from '$lib/components/chat/Messages.svelte';
|
||||||
import Navbar from '$lib/components/layout/Navbar.svelte';
|
import Navbar from '$lib/components/layout/Navbar.svelte';
|
||||||
|
import { getUserById } from '$lib/apis/users';
|
||||||
|
|
||||||
const i18n = getContext('i18n');
|
const i18n = getContext('i18n');
|
||||||
|
|
||||||
@ -37,6 +38,7 @@
|
|||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
let chat = null;
|
let chat = null;
|
||||||
|
let user = null;
|
||||||
|
|
||||||
let title = '';
|
let title = '';
|
||||||
let files = [];
|
let files = [];
|
||||||
@ -88,6 +90,8 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (chat) {
|
if (chat) {
|
||||||
|
user = await getUserById(localStorage.token, chat.user_id);
|
||||||
|
|
||||||
const chatContent = chat.chat;
|
const chatContent = chat.chat;
|
||||||
|
|
||||||
if (chatContent) {
|
if (chatContent) {
|
||||||
@ -156,6 +160,7 @@
|
|||||||
<div class=" h-full w-full flex flex-col py-4">
|
<div class=" h-full w-full flex flex-col py-4">
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
<Messages
|
<Messages
|
||||||
|
{user}
|
||||||
chatId={$chatId}
|
chatId={$chatId}
|
||||||
readOnly={true}
|
readOnly={true}
|
||||||
{selectedModels}
|
{selectedModels}
|
||||||
|
Loading…
Reference in New Issue
Block a user