| | |
| | | import { AnswerType, MultiChatType, RoleEnum, StepEnum } from '../model/types'; |
| | | import { GetHistoryAnswer } from '/@/api/ai/chat'; |
| | | import moment from 'moment'; |
| | | |
| | | import type { Attach } from '../components/playBar/hook/useAttach'; |
| | | import { |
| | | getFileGroupType, |
| | | getFileSuffix, |
| | | getIconByGroupType, |
| | | getIconClassByGroupType, |
| | | } from '../components/playBar/hook/useUploadFile'; |
| | | export const useLoadData = () => { |
| | | const parseExtraContent = (res) => { |
| | | if (!res) return {}; |
| | |
| | | |
| | | return content; |
| | | }; |
| | | |
| | | /** |
| | | * 获取步骤组列表 |
| | | * @param reports |
| | | * @returns |
| | | */ |
| | | const getStepGroupList = (reports: any[]) => { |
| | | const stepGroupList = (reports ?? []).map((item) => ({ |
| | | value: convertProcessToStep(item?.exec_process), |
| | | isShow: false, |
| | | })); |
| | | /** @description 全部放到第一个 */ |
| | | stepGroupList.map((item, index) => { |
| | | if (index !== 0) { |
| | | stepGroupList[0].value.push(...item.value); |
| | | item.value = []; |
| | | } |
| | | }); |
| | | return stepGroupList; |
| | | }; |
| | | const formatShowTimeYear = (str: string) => { |
| | | const date = moment(str); |
| | | const now = moment(); |
| | |
| | | history_id: historyId, |
| | | }); |
| | | }; |
| | | |
| | | const convertAttach = (userValues: any): Attach[] => { |
| | | const attachList: Attach[] = []; |
| | | if (userValues?.attach_tables) { |
| | | userValues.attach_tables.forEach((item: any) => { |
| | | attachList.push({ |
| | | title: item.title, |
| | | type: 'table', |
| | | model: item, |
| | | icon: 'biaoge', |
| | | iconClass: 'ywicon-biaoge text-[#c5e0ff]', |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | if (userValues?.attach_files) { |
| | | userValues.attach_files.forEach((item: any) => { |
| | | const suffix = getFileSuffix(item.file_name); |
| | | const groupType = getFileGroupType(suffix); |
| | | attachList.push({ |
| | | title: item.file_name, |
| | | type: 'file', |
| | | model: item, |
| | | icon: getIconByGroupType(groupType), |
| | | iconClass: getIconClassByGroupType(groupType), |
| | | }); |
| | | }); |
| | | } |
| | | return attachList; |
| | | }; |
| | | /** |
| | | * 获取用户回复数据,并插入到对话当中去 |
| | | */ |
| | |
| | | const tmpMessageList: ChatMessage[] = userMsg.map((item) => { |
| | | return { |
| | | historyId: item.history_id, |
| | | createTime: item.create_time, |
| | | role: RoleEnum.user, |
| | | content: { |
| | | type: AnswerType.Text, |
| | |
| | | } as ChatMessage; |
| | | }); |
| | | const resList = await Promise.all( |
| | | (userMsg ?? []).map((item) => { |
| | | userItemIdMap.set(item.history_id, item); |
| | | (userMsg ?? []).map((item, index) => { |
| | | userItemIdMap.set(index, item); |
| | | return getAnswerById(item.history_id); |
| | | }) |
| | | ); |
| | |
| | | const insertIndex = index + 1 + i; |
| | | const currentUserMsg = tmpMessageList[insertIndex - 1]; |
| | | currentUserMsg.content.values = item?.answer?.question ?? currentUserMsg.content.values; |
| | | |
| | | const mapUser = userItemIdMap.get(item.answer?.history_id); |
| | | const attachList = convertAttach(item?.answer); |
| | | currentUserMsg.attachList = attachList; |
| | | const mapUser = userItemIdMap.get(index); |
| | | const historyId = mapUser?.history_id; |
| | | |
| | | const answerTime = formatShowTimeYear(mapUser?.create_time); |
| | | |
| | | tmpMessageList.splice( |
| | | insertIndex, |
| | | 0, |
| | | item.answer === null |
| | | ? null |
| | | : { |
| | | historyId: item.answer?.history_id, |
| | | historyId: historyId, |
| | | role: RoleEnum.assistant, |
| | | content: parseContent(item?.answer), |
| | | state: item.answer_state, |
| | | createTime: answerTime, |
| | | isStopMsg: false, |
| | | stepGroup: (item?.answer?.reports ?? []).map((item) => ({ |
| | | value: convertProcessToStep(item?.exec_process), |
| | | isShow: false, |
| | | })), |
| | | // stepGroup: (item?.answer?.reports ?? []).map((item) => ({ |
| | | // value: convertProcessToStep(item?.exec_process), |
| | | // isShow: false, |
| | | // })) |
| | | stepGroup: getStepGroupList(item?.answer?.reports ?? []), |
| | | |
| | | conclusion: item?.answer?.conclusion ?? [], |
| | | isChecked: false, |
| | |
| | | } as StepItem; |
| | | }; |
| | | const convertProcessToStep = (process: any[], isHistory = true) => { |
| | | let streamIsStart = false; |
| | | |
| | | const stepList = (process ?? []).reduce((preVal, curVal) => { |
| | | if (curVal.mode === 'question') { |
| | | if (isHistory) return preVal; |
| | |
| | | type: MultiChatType.Select, |
| | | }; |
| | | last.subStep.push(sub); |
| | | } else if (curVal.mode === 'begin_stream') { |
| | | streamIsStart = true; |
| | | const cur = convertProcessItem(curVal); |
| | | preVal.push(cur); |
| | | } else if (curVal.mode === 'end_stream') { |
| | | streamIsStart = false; |
| | | } else if (streamIsStart) { |
| | | const last = preVal.at(-1); |
| | | last.title += curVal.value; |
| | | } else { |
| | | const cur = convertProcessItem(curVal); |
| | | preVal.push(cur); |
| | |
| | | convertProcessToStep, |
| | | convertProcessItem, |
| | | formatShowTimeYear, |
| | | getStepGroupList, |
| | | convertAttach, |
| | | }; |
| | | }; |