|
|
|
@@ -16,7 +16,6 @@ import timezone from 'dayjs/plugin/timezone' |
|
|
|
import { createContext, useContext } from 'use-context-selector' |
|
|
|
import { useShallow } from 'zustand/react/shallow' |
|
|
|
import { useTranslation } from 'react-i18next' |
|
|
|
import { UUID_NIL } from '../../base/chat/constants' |
|
|
|
import type { ChatItemInTree } from '../../base/chat/types' |
|
|
|
import VarPanel from './var-panel' |
|
|
|
import cn from '@/utils/classnames' |
|
|
|
@@ -84,95 +83,76 @@ const PARAM_MAP = { |
|
|
|
frequency_penalty: 'Frequency Penalty', |
|
|
|
} |
|
|
|
|
|
|
|
function appendQAToChatList(newChatList: IChatItem[], item: any, conversationId: string, timezone: string, format: string) { |
|
|
|
const answerFiles = item.message_files?.filter((file: any) => file.belongs_to === 'assistant') || [] |
|
|
|
newChatList.push({ |
|
|
|
id: item.id, |
|
|
|
content: item.answer, |
|
|
|
agent_thoughts: addFileInfos(item.agent_thoughts ? sortAgentSorts(item.agent_thoughts) : item.agent_thoughts, item.message_files), |
|
|
|
feedback: item.feedbacks.find((item: any) => item.from_source === 'user'), // user feedback |
|
|
|
adminFeedback: item.feedbacks.find((item: any) => item.from_source === 'admin'), // admin feedback |
|
|
|
feedbackDisabled: false, |
|
|
|
isAnswer: true, |
|
|
|
message_files: getProcessedFilesFromResponse(answerFiles.map((item: any) => ({ ...item, related_id: item.id }))), |
|
|
|
log: [ |
|
|
|
...item.message, |
|
|
|
...(item.message[item.message.length - 1]?.role !== 'assistant' |
|
|
|
? [ |
|
|
|
{ |
|
|
|
role: 'assistant', |
|
|
|
text: item.answer, |
|
|
|
files: item.message_files?.filter((file: any) => file.belongs_to === 'assistant') || [], |
|
|
|
}, |
|
|
|
] |
|
|
|
: []), |
|
|
|
], |
|
|
|
workflow_run_id: item.workflow_run_id, |
|
|
|
conversationId, |
|
|
|
input: { |
|
|
|
inputs: item.inputs, |
|
|
|
query: item.query, |
|
|
|
}, |
|
|
|
more: { |
|
|
|
time: dayjs.unix(item.created_at).tz(timezone).format(format), |
|
|
|
tokens: item.answer_tokens + item.message_tokens, |
|
|
|
latency: item.provider_response_latency.toFixed(2), |
|
|
|
}, |
|
|
|
citation: item.metadata?.retriever_resources, |
|
|
|
annotation: (() => { |
|
|
|
if (item.annotation_hit_history) { |
|
|
|
return { |
|
|
|
id: item.annotation_hit_history.annotation_id, |
|
|
|
authorName: item.annotation_hit_history.annotation_create_account?.name || 'N/A', |
|
|
|
created_at: item.annotation_hit_history.created_at, |
|
|
|
} |
|
|
|
} |
|
|
|
const getFormattedChatList = (messages: ChatMessage[], conversationId: string, timezone: string, format: string) => { |
|
|
|
const newChatList: IChatItem[] = [] |
|
|
|
messages.forEach((item: ChatMessage) => { |
|
|
|
const questionFiles = item.message_files?.filter((file: any) => file.belongs_to === 'user') || [] |
|
|
|
newChatList.push({ |
|
|
|
id: `question-${item.id}`, |
|
|
|
content: item.inputs.query || item.inputs.default_input || item.query, // text generation: item.inputs.query; chat: item.query |
|
|
|
isAnswer: false, |
|
|
|
message_files: getProcessedFilesFromResponse(questionFiles.map((item: any) => ({ ...item, related_id: item.id }))), |
|
|
|
parentMessageId: item.parent_message_id || undefined, |
|
|
|
}) |
|
|
|
|
|
|
|
if (item.annotation) { |
|
|
|
return { |
|
|
|
id: item.annotation.id, |
|
|
|
authorName: item.annotation.account.name, |
|
|
|
logAnnotation: item.annotation, |
|
|
|
created_at: 0, |
|
|
|
const answerFiles = item.message_files?.filter((file: any) => file.belongs_to === 'assistant') || [] |
|
|
|
newChatList.push({ |
|
|
|
id: item.id, |
|
|
|
content: item.answer, |
|
|
|
agent_thoughts: addFileInfos(item.agent_thoughts ? sortAgentSorts(item.agent_thoughts) : item.agent_thoughts, item.message_files), |
|
|
|
feedback: item.feedbacks.find(item => item.from_source === 'user'), // user feedback |
|
|
|
adminFeedback: item.feedbacks.find(item => item.from_source === 'admin'), // admin feedback |
|
|
|
feedbackDisabled: false, |
|
|
|
isAnswer: true, |
|
|
|
message_files: getProcessedFilesFromResponse(answerFiles.map((item: any) => ({ ...item, related_id: item.id }))), |
|
|
|
log: [ |
|
|
|
...item.message, |
|
|
|
...(item.message[item.message.length - 1]?.role !== 'assistant' |
|
|
|
? [ |
|
|
|
{ |
|
|
|
role: 'assistant', |
|
|
|
text: item.answer, |
|
|
|
files: item.message_files?.filter((file: any) => file.belongs_to === 'assistant') || [], |
|
|
|
}, |
|
|
|
] |
|
|
|
: []), |
|
|
|
] as IChatItem['log'], |
|
|
|
workflow_run_id: item.workflow_run_id, |
|
|
|
conversationId, |
|
|
|
input: { |
|
|
|
inputs: item.inputs, |
|
|
|
query: item.query, |
|
|
|
}, |
|
|
|
more: { |
|
|
|
time: dayjs.unix(item.created_at).tz(timezone).format(format), |
|
|
|
tokens: item.answer_tokens + item.message_tokens, |
|
|
|
latency: item.provider_response_latency.toFixed(2), |
|
|
|
}, |
|
|
|
citation: item.metadata?.retriever_resources, |
|
|
|
annotation: (() => { |
|
|
|
if (item.annotation_hit_history) { |
|
|
|
return { |
|
|
|
id: item.annotation_hit_history.annotation_id, |
|
|
|
authorName: item.annotation_hit_history.annotation_create_account?.name || 'N/A', |
|
|
|
created_at: item.annotation_hit_history.created_at, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return undefined |
|
|
|
})(), |
|
|
|
parentMessageId: `question-${item.id}`, |
|
|
|
}) |
|
|
|
if (item.annotation) { |
|
|
|
return { |
|
|
|
id: item.annotation.id, |
|
|
|
authorName: item.annotation.account.name, |
|
|
|
logAnnotation: item.annotation, |
|
|
|
created_at: 0, |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const questionFiles = item.message_files?.filter((file: any) => file.belongs_to === 'user') || [] |
|
|
|
newChatList.push({ |
|
|
|
id: `question-${item.id}`, |
|
|
|
content: item.inputs.query || item.inputs.default_input || item.query, // text generation: item.inputs.query; chat: item.query |
|
|
|
isAnswer: false, |
|
|
|
message_files: getProcessedFilesFromResponse(questionFiles.map((item: any) => ({ ...item, related_id: item.id }))), |
|
|
|
parentMessageId: item.parent_message_id || undefined, |
|
|
|
return undefined |
|
|
|
})(), |
|
|
|
parentMessageId: `question-${item.id}`, |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
const getFormattedChatList = (messages: ChatMessage[], conversationId: string, timezone: string, format: string) => { |
|
|
|
const newChatList: IChatItem[] = [] |
|
|
|
let nextMessageId = null |
|
|
|
for (const item of messages) { |
|
|
|
if (!item.parent_message_id) { |
|
|
|
appendQAToChatList(newChatList, item, conversationId, timezone, format) |
|
|
|
break |
|
|
|
} |
|
|
|
|
|
|
|
if (!nextMessageId) { |
|
|
|
appendQAToChatList(newChatList, item, conversationId, timezone, format) |
|
|
|
nextMessageId = item.parent_message_id |
|
|
|
} |
|
|
|
else { |
|
|
|
if (item.id === nextMessageId || nextMessageId === UUID_NIL) { |
|
|
|
appendQAToChatList(newChatList, item, conversationId, timezone, format) |
|
|
|
nextMessageId = item.parent_message_id |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return newChatList.reverse() |
|
|
|
return newChatList |
|
|
|
} |
|
|
|
|
|
|
|
// const displayedParams = CompletionParams.slice(0, -2) |