mirror of https://github.com/langgenius/dify.git
message log
This commit is contained in:
parent
9638885a67
commit
a2e30e6aa9
|
|
@ -11,7 +11,7 @@ const Log: FC<LogProps> = ({
|
|||
logItem,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const { setCurrentLogItem, setShowPromptLogModal } = useAppStore()
|
||||
const { setCurrentLogItem, setShowPromptLogModal, setShowMessageLogModal } = useAppStore()
|
||||
const { workflow_run_id: runID } = logItem
|
||||
|
||||
return (
|
||||
|
|
@ -21,7 +21,10 @@ const Log: FC<LogProps> = ({
|
|||
e.stopPropagation()
|
||||
e.nativeEvent.stopImmediatePropagation()
|
||||
setCurrentLogItem(logItem)
|
||||
setShowPromptLogModal(true)
|
||||
if (runID)
|
||||
setShowMessageLogModal(true)
|
||||
else
|
||||
setShowPromptLogModal(true)
|
||||
}}
|
||||
>
|
||||
<File02 className='mr-1 w-4 h-4 text-gray-500' />
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints'
|
|||
import TextGeneration from '@/app/components/app/text-generate/item'
|
||||
import { addFileInfos, sortAgentSorts } from '@/app/components/tools/utils'
|
||||
import PromptLogModal from '@/app/components/base/prompt-log-modal'
|
||||
import MessageLogModal from '@/app/components/base/message-log-modal'
|
||||
import { useStore as useAppStore } from '@/app/components/app/store'
|
||||
|
||||
type IConversationList = {
|
||||
|
|
@ -143,7 +144,7 @@ type IDetailPanel<T> = {
|
|||
|
||||
function DetailPanel<T extends ChatConversationFullDetailResponse | CompletionConversationFullDetailResponse>({ detail, onFeedback }: IDetailPanel<T>) {
|
||||
const { onClose, appDetail } = useContext(DrawerContext)
|
||||
const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal } = useAppStore()
|
||||
const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal, showMessageLogModal, setShowMessageLogModal } = useAppStore()
|
||||
const { t } = useTranslation()
|
||||
const [items, setItems] = React.useState<IChatItem[]>([])
|
||||
const [hasMore, setHasMore] = useState(true)
|
||||
|
|
@ -391,6 +392,16 @@ function DetailPanel<T extends ChatConversationFullDetailResponse | CompletionCo
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{showMessageLogModal && (
|
||||
<MessageLogModal
|
||||
width={width}
|
||||
currentLogItem={currentLogItem}
|
||||
onCancel={() => {
|
||||
setCurrentLogItem()
|
||||
setShowMessageLogModal(false)
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import Button from '@/app/components/base/button'
|
|||
import { StopCircle } from '@/app/components/base/icons/src/vender/solid/mediaAndDevices'
|
||||
import PromptLogModal from '@/app/components/base/prompt-log-modal'
|
||||
import { useStore as useAppStore } from '@/app/components/app/store'
|
||||
import MessageLogModal from '@/app/components/base/message-log-modal'
|
||||
|
||||
export type ChatProps = {
|
||||
chatList: ChatItem[]
|
||||
|
|
@ -75,7 +76,7 @@ const Chat: FC<ChatProps> = ({
|
|||
onFeedback,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal } = useAppStore()
|
||||
const { currentLogItem, setCurrentLogItem, showPromptLogModal, setShowPromptLogModal, showMessageLogModal, setShowMessageLogModal } = useAppStore()
|
||||
const [width, setWidth] = useState(0)
|
||||
const chatContainerRef = useRef<HTMLDivElement>(null)
|
||||
const chatContainerInnerRef = useRef<HTMLDivElement>(null)
|
||||
|
|
@ -233,6 +234,17 @@ const Chat: FC<ChatProps> = ({
|
|||
}}
|
||||
/>
|
||||
)}
|
||||
{showMessageLogModal && (
|
||||
<MessageLogModal
|
||||
fixedWidth
|
||||
width={width}
|
||||
currentLogItem={currentLogItem}
|
||||
onCancel={() => {
|
||||
setCurrentLogItem()
|
||||
setShowMessageLogModal(false)
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</ChatContextProvider>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
import type { FC } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import cn from 'classnames'
|
||||
import { useEffect, useRef, useState } from 'react'
|
||||
import { useClickAway } from 'ahooks'
|
||||
import { XClose } from '@/app/components/base/icons/src/vender/line/general'
|
||||
import type { IChatItem } from '@/app/components/app/chat/type'
|
||||
import Run from '@/app/components/workflow/run'
|
||||
|
||||
type MessageLogModalProps = {
|
||||
currentLogItem?: IChatItem
|
||||
width: number
|
||||
fixedWidth?: boolean
|
||||
onCancel: () => void
|
||||
}
|
||||
const MessageLogModal: FC<MessageLogModalProps> = ({
|
||||
currentLogItem,
|
||||
width,
|
||||
fixedWidth,
|
||||
onCancel,
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const ref = useRef(null)
|
||||
const [mounted, setMounted] = useState(false)
|
||||
|
||||
useClickAway(() => {
|
||||
if (mounted)
|
||||
onCancel()
|
||||
}, ref)
|
||||
|
||||
useEffect(() => {
|
||||
setMounted(true)
|
||||
}, [])
|
||||
|
||||
if (!currentLogItem || !currentLogItem.workflow_run_id)
|
||||
return null
|
||||
|
||||
return (
|
||||
<div
|
||||
className={cn('fixed top-16 bottom-2 flex flex-col py-3 bg-white border-[0.5px] border-gray-200 rounded-xl shadow-xl z-10')}
|
||||
style={{
|
||||
width: fixedWidth ? 400 : width,
|
||||
left: fixedWidth ? `${8 + width - 400}px` : '8px',
|
||||
}}
|
||||
ref={ref}
|
||||
>
|
||||
<h1 className='shrink-0 px-4 py-1 text-md font-semibold text-gray-900'>{t('appLog.runDetail.title')}</h1>
|
||||
<span className='absolute right-3 top-4 p-1 cursor-pointer z-20' onClick={onCancel}>
|
||||
<XClose className='w-4 h-4 text-gray-500' />
|
||||
</span>
|
||||
<Run runID={currentLogItem.workflow_run_id}/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default MessageLogModal
|
||||
|
|
@ -72,6 +72,10 @@ const translation = {
|
|||
},
|
||||
workflowTitle: '日志',
|
||||
workflowSubtitle: '日志记录了应用的执行情况',
|
||||
runDetail: {
|
||||
title: '对话日志',
|
||||
workflowTitle: '日志详情',
|
||||
},
|
||||
promptLog: 'Prompt 日志',
|
||||
viewLog: '查看日志',
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue