diff --git a/docker/.env.example b/docker/.env.example index 84b6152f0a..35c8a0598b 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -196,6 +196,12 @@ ENABLE_WEBSITE_JINAREADER=true ENABLE_WEBSITE_FIRECRAWL=true ENABLE_WEBSITE_WATERCRAWL=true +# ------------------------------- +# Frontend Chat Configuration +# -------------------------------- +HIDE_CHAT_USER_ICON=false +HIDE_CHAT_BOT_ICON=false + # ------------------------------ # Database Configuration # The database uses PostgreSQL. Please use the public schema. diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 7c1544acb9..a43a080ac9 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -80,6 +80,8 @@ services: ENABLE_WEBSITE_JINAREADER: ${ENABLE_WEBSITE_JINAREADER:-true} ENABLE_WEBSITE_FIRECRAWL: ${ENABLE_WEBSITE_FIRECRAWL:-true} ENABLE_WEBSITE_WATERCRAWL: ${ENABLE_WEBSITE_WATERCRAWL:-true} + HIDE_CHAT_USER_ICON: ${HIDE_CHAT_USER_ICON:-false} + HIDE_CHAT_BOT_ICON: ${HIDE_CHAT_BOT_ICON:-false} # The postgres database. db: image: postgres:15-alpine diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index ac9953aa33..3ddc24e3a1 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -597,6 +597,8 @@ services: ENABLE_WEBSITE_JINAREADER: ${ENABLE_WEBSITE_JINAREADER:-true} ENABLE_WEBSITE_FIRECRAWL: ${ENABLE_WEBSITE_FIRECRAWL:-true} ENABLE_WEBSITE_WATERCRAWL: ${ENABLE_WEBSITE_WATERCRAWL:-true} + HIDE_CHAT_USER_ICON: ${HIDE_CHAT_USER_ICON:-false} + HIDE_CHAT_BOT_ICON: ${HIDE_CHAT_BOT_ICON:-false} # The postgres database. db: image: postgres:15-alpine diff --git a/web/app/components/base/chat/chat/answer/index.tsx b/web/app/components/base/chat/chat/answer/index.tsx index 3722556931..4218c1ad22 100644 --- a/web/app/components/base/chat/chat/answer/index.tsx +++ b/web/app/components/base/chat/chat/answer/index.tsx @@ -19,6 +19,7 @@ import Citation from '@/app/components/base/chat/chat/citation' import { EditTitle } from '@/app/components/app/annotation/edit-annotation-modal/edit-item' import type { AppData } from '@/models/share' import AnswerIcon from '@/app/components/base/answer-icon' +import { HIDE_CHAT_BOT_ICON } from '@/config' import cn from '@/utils/classnames' import { FileList } from '@/app/components/base/file-uploader' import ContentSwitch from '../content-switch' @@ -109,14 +110,18 @@ const Answer: FC = ({ return (
-
- {answerIcon || } - {responding && ( -
- + { + !HIDE_CHAT_BOT_ICON && ( +
+ {answerIcon || } + {responding && ( +
+ +
+ )}
- )} -
+ ) + }
= ({
-
- { - questionIcon || ( -
- -
- ) - } -
+ { + !HIDE_CHAT_USER_ICON && ( +
+ { + questionIcon || ( +
+ +
+ ) + } +
+ ) + }
) } diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 525445db30..c912a79f63 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -48,6 +48,8 @@ const LocaleLayout = async ({ [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_JINAREADER, [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL, [DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL]: process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL, + [DatasetAttr.DATA_PUBLIC_HIDE_CHAT_USER_ICON]: process.env.NEXT_PUBLIC_HIDE_CHAT_USER_ICON, + [DatasetAttr.DATA_PUBLIC_HIDE_CHAT_BOT_ICON]: process.env.NEXT_PUBLIC_HIDE_CHAT_BOT_ICON, } return ( diff --git a/web/config/index.ts b/web/config/index.ts index 667723aaaf..77ec04d28f 100644 --- a/web/config/index.ts +++ b/web/config/index.ts @@ -275,6 +275,9 @@ export const ENABLE_WEBSITE_JINAREADER = getBooleanConfig(process.env.NEXT_PUBLI export const ENABLE_WEBSITE_FIRECRAWL = getBooleanConfig(process.env.NEXT_PUBLIC_ENABLE_WEBSITE_FIRECRAWL, DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL, true) export const ENABLE_WEBSITE_WATERCRAWL = getBooleanConfig(process.env.NEXT_PUBLIC_ENABLE_WEBSITE_WATERCRAWL, DatasetAttr.DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL, false) +export const HIDE_CHAT_USER_ICON = getBooleanConfig(process.env.NEXT_PUBLIC_HIDE_CHAT_USER_ICON, DatasetAttr.DATA_PUBLIC_HIDE_CHAT_USER_ICON, false) +export const HIDE_CHAT_BOT_ICON = getBooleanConfig(process.env.NEXT_PUBLIC_HIDE_CHAT_BOT_ICON, DatasetAttr.DATA_PUBLIC_HIDE_CHAT_BOT_ICON, false) + export const VALUE_SELECTOR_DELIMITER = '@@@' export const validPassword = /^(?=.*[a-zA-Z])(?=.*\d)\S{8,}$/ diff --git a/web/docker/entrypoint.sh b/web/docker/entrypoint.sh index ef13011a71..3f00b5ce3a 100755 --- a/web/docker/entrypoint.sh +++ b/web/docker/entrypoint.sh @@ -37,4 +37,6 @@ export NEXT_PUBLIC_LOOP_NODE_MAX_COUNT=${LOOP_NODE_MAX_COUNT} export NEXT_PUBLIC_MAX_PARALLEL_LIMIT=${MAX_PARALLEL_LIMIT} export NEXT_PUBLIC_MAX_ITERATIONS_NUM=${MAX_ITERATIONS_NUM} export NEXT_PUBLIC_MAX_TREE_DEPTH=${MAX_TREE_DEPTH} +export NEXT_PUBLIC_HIDE_CHAT_USER_ICON=${HIDE_CHAT_USER_ICON:-false} +export NEXT_PUBLIC_HIDE_CHAT_BOT_ICON=${HIDE_CHAT_BOT_ICON:-false} pm2 start /app/web/server.js --name dify-web --cwd /app/web -i ${PM2_INSTANCES} --no-daemon diff --git a/web/types/feature.ts b/web/types/feature.ts index 5787c2661f..9cf8549fc2 100644 --- a/web/types/feature.ts +++ b/web/types/feature.ts @@ -120,4 +120,6 @@ export enum DatasetAttr { DATA_PUBLIC_ENABLE_WEBSITE_JINAREADER = 'data-public-enable-website-jinareader', DATA_PUBLIC_ENABLE_WEBSITE_FIRECRAWL = 'data-public-enable-website-firecrawl', DATA_PUBLIC_ENABLE_WEBSITE_WATERCRAWL = 'data-public-enable-website-watercrawl', + DATA_PUBLIC_HIDE_CHAT_USER_ICON = 'data-public-hide-chat-user-icon', + DATA_PUBLIC_HIDE_CHAT_BOT_ICON = 'data-public-hide-chat-bot-icon', }