mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-07-10 05:51:50 +08:00
feat: enchance chat user experience (#660)
This commit is contained in:
parent
b5825142d1
commit
eae670ea4a
@ -45,8 +45,12 @@ const Thought: FC<IThoughtProps> = ({
|
|||||||
return t('explore.universalChat.thought.res.dataset').replace('{datasetName}', `<span class="text-gray-700">${datasetName}</span>`)
|
return t('explore.universalChat.thought.res.dataset').replace('{datasetName}', `<span class="text-gray-700">${datasetName}</span>`)
|
||||||
case 'web_reader':
|
case 'web_reader':
|
||||||
return t(`explore.universalChat.thought.res.webReader.${!input.cursor ? 'normal' : 'hasPageInfo'}`).replace('{url}', `<a href="${input.url}" class="text-[#155EEF]">${input.url}</a>`)
|
return t(`explore.universalChat.thought.res.webReader.${!input.cursor ? 'normal' : 'hasPageInfo'}`).replace('{url}', `<a href="${input.url}" class="text-[#155EEF]">${input.url}</a>`)
|
||||||
default: // google, wikipedia
|
case 'google_search':
|
||||||
return t('explore.universalChat.thought.res.search', { query: input.query })
|
return t('explore.universalChat.thought.res.google', { query: input.query })
|
||||||
|
case 'wikipedia':
|
||||||
|
return t('explore.universalChat.thought.res.wikipedia', { query: input.query })
|
||||||
|
default:
|
||||||
|
return `Unknown tool: ${item.tool}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
|
@ -47,6 +47,28 @@ const DEFAULT_PLUGIN = {
|
|||||||
web_reader: true,
|
web_reader: true,
|
||||||
wikipedia: true,
|
wikipedia: true,
|
||||||
}
|
}
|
||||||
|
const CONFIG_KEY = 'universal-chat-config'
|
||||||
|
type CONFIG = {
|
||||||
|
modelId: string
|
||||||
|
plugin: {
|
||||||
|
google_search: boolean
|
||||||
|
web_reader: boolean
|
||||||
|
wikipedia: boolean
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let prevConfig: null | CONFIG = localStorage.getItem(CONFIG_KEY) ? JSON.parse(localStorage.getItem(CONFIG_KEY) as string) as CONFIG : null
|
||||||
|
const setPrevConfig = (config: CONFIG) => {
|
||||||
|
prevConfig = config
|
||||||
|
localStorage.setItem(CONFIG_KEY, JSON.stringify(prevConfig))
|
||||||
|
}
|
||||||
|
const getInitConfig = (type: 'model' | 'plugin') => {
|
||||||
|
if (type === 'model')
|
||||||
|
return prevConfig?.modelId || DEFAULT_MODEL_ID
|
||||||
|
|
||||||
|
if (type === 'plugin')
|
||||||
|
return prevConfig?.plugin || DEFAULT_PLUGIN
|
||||||
|
}
|
||||||
|
|
||||||
export type IMainProps = {}
|
export type IMainProps = {}
|
||||||
|
|
||||||
const Main: FC<IMainProps> = () => {
|
const Main: FC<IMainProps> = () => {
|
||||||
@ -415,6 +437,13 @@ const Main: FC<IMainProps> = () => {
|
|||||||
const [errorHappened, setErrorHappened] = useState(false)
|
const [errorHappened, setErrorHappened] = useState(false)
|
||||||
const [isResponsingConIsCurrCon, setIsResponsingConCurrCon, getIsResponsingConIsCurrCon] = useGetState(true)
|
const [isResponsingConIsCurrCon, setIsResponsingConCurrCon, getIsResponsingConIsCurrCon] = useGetState(true)
|
||||||
const handleSend = async (message: string) => {
|
const handleSend = async (message: string) => {
|
||||||
|
if (isNewConversation) {
|
||||||
|
setPrevConfig({
|
||||||
|
modelId,
|
||||||
|
plugin: plugins as any,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if (isResponsing) {
|
if (isResponsing) {
|
||||||
notify({ type: 'info', message: t('appDebug.errorMessage.waitForResponse') })
|
notify({ type: 'info', message: t('appDebug.errorMessage.waitForResponse') })
|
||||||
return
|
return
|
||||||
@ -598,10 +627,10 @@ const Main: FC<IMainProps> = () => {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const [modelId, setModeId] = useState(DEFAULT_MODEL_ID)
|
const [modelId, setModeId] = useState<string>(getInitConfig('model') as string)
|
||||||
// const currModel = MODEL_LIST.find(item => item.id === modelId)
|
// const currModel = MODEL_LIST.find(item => item.id === modelId)
|
||||||
|
|
||||||
const [plugins, setPlugins] = useState<Record<string, boolean>>(DEFAULT_PLUGIN)
|
const [plugins, setPlugins] = useState<Record<string, boolean>>(getInitConfig('plugin') as Record<string, boolean>)
|
||||||
const handlePluginsChange = (key: string, value: boolean) => {
|
const handlePluginsChange = (key: string, value: boolean) => {
|
||||||
setPlugins({
|
setPlugins({
|
||||||
...plugins,
|
...plugins,
|
||||||
@ -610,8 +639,8 @@ const Main: FC<IMainProps> = () => {
|
|||||||
}
|
}
|
||||||
const [dataSets, setDateSets] = useState<DataSet[]>([])
|
const [dataSets, setDateSets] = useState<DataSet[]>([])
|
||||||
const configSetDefaultValue = () => {
|
const configSetDefaultValue = () => {
|
||||||
setModeId(DEFAULT_MODEL_ID)
|
setModeId(getInitConfig('model') as string)
|
||||||
setPlugins(DEFAULT_PLUGIN)
|
setPlugins(getInitConfig('plugin') as any)
|
||||||
setDateSets([])
|
setDateSets([])
|
||||||
}
|
}
|
||||||
const isCurrConversationPinned = !!pinnedConversationList.find(item => item.id === currConversationId)
|
const isCurrConversationPinned = !!pinnedConversationList.find(item => item.id === currConversationId)
|
||||||
|
@ -66,7 +66,8 @@ const translation = {
|
|||||||
normal: 'Reading {url}',
|
normal: 'Reading {url}',
|
||||||
hasPageInfo: 'Reading next page of {url}',
|
hasPageInfo: 'Reading next page of {url}',
|
||||||
},
|
},
|
||||||
search: 'Searching {{query}}',
|
google: 'Searching Google {{query}}',
|
||||||
|
wikipedia: 'Searching Wikipedia {{query}}',
|
||||||
dataset: 'Retrieving dataset {datasetName}',
|
dataset: 'Retrieving dataset {datasetName}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -66,7 +66,8 @@ const translation = {
|
|||||||
normal: '解析链接 {url}',
|
normal: '解析链接 {url}',
|
||||||
hasPageInfo: '解析链接 {url} 的下一页',
|
hasPageInfo: '解析链接 {url} 的下一页',
|
||||||
},
|
},
|
||||||
search: '搜索 {{query}}',
|
google: '搜索谷歌 {{query}}',
|
||||||
|
wikipedia: '搜索维基百科 {{query}}',
|
||||||
dataset: '检索数据集 {datasetName}',
|
dataset: '检索数据集 {datasetName}',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user