perf: 主agent对话交互调整
This commit is contained in:
@ -46,7 +46,7 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
const generateLoading = ref<boolean>(false);
|
||||
const currentTaskId = ref<string | null>(null);
|
||||
const showRightView = ref(false);
|
||||
const rightViewInfo = ref<any>({});
|
||||
const rightViewData = ref<any>({});
|
||||
const lastTeamRunTaskId = ref<string | null>(null); // 最近一个对话的id
|
||||
|
||||
// 初始化markdown
|
||||
@ -94,14 +94,30 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
variant: 'borderless',
|
||||
style: ROLE_STYLE,
|
||||
messageRender: (message: string) => {
|
||||
return <div v-html={md.render(message)} />
|
||||
return <div v-html={md.render(message)} />;
|
||||
},
|
||||
footer: (params) => {
|
||||
const { content, item } = params as { content: string; item: MESSAGE.Answer };
|
||||
const isShow = conversationList.value[conversationList.value.length - 1].run_id === item.run_id;
|
||||
return (
|
||||
<div class="flex items-center">
|
||||
<Tooltip title="复制" onClick={() => onCopy(content)}>
|
||||
<IconCopy size={16} class="color-#737478 cursor-pointer mr-12px" />
|
||||
</Tooltip>
|
||||
{isShow && (
|
||||
<Tooltip title="重新生成" onClick={() => handleRemoteRefresh(item)}>
|
||||
<IconRefresh size={16} class="color-#737478 cursor-pointer" />
|
||||
</Tooltip>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
// 下载处理
|
||||
const onDownload = () => {
|
||||
console.log('onDownload', rightViewInfo.value);
|
||||
console.log('onDownload', rightViewData.value);
|
||||
};
|
||||
|
||||
const onCopy = (content: string) => {
|
||||
@ -114,10 +130,25 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
generateLoading.value = false;
|
||||
};
|
||||
|
||||
const handleRemoteRefresh = (item: MESSAGE.Answer) => {
|
||||
generateLoading.value = true;
|
||||
|
||||
const targetIndex = conversationList.value.findIndex(
|
||||
(v) => v.teamRunTaskId === item.teamRunTaskId && v.run_id === item.run_id && v.role === REMOTE_ASSISTANT_ROLE,
|
||||
);
|
||||
const message = conversationList.value[targetIndex - 1]?.content;
|
||||
conversationList.value.splice(targetIndex, 1);
|
||||
|
||||
initSse({ message });
|
||||
};
|
||||
|
||||
const onRefresh = (run_id: string) => {
|
||||
generateLoading.value = true;
|
||||
conversationList.value = conversationList.value.filter((item) => item.run_id !== run_id);
|
||||
initSse({ message: senderRef.value?.searchValue });
|
||||
|
||||
const targetIndex = conversationList.value.findIndex((v) => v.teamRunTaskId === run_id);
|
||||
conversationList.value = conversationList.value.filter((item) => item.teamRunTaskId !== run_id);
|
||||
const message = conversationList.value[targetIndex - 1]?.content;
|
||||
initSse({ message });
|
||||
};
|
||||
|
||||
const getAllRunTask = (teamRunTaskId: string) => {
|
||||
@ -128,7 +159,7 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
const getRunTask = (run_id: string) => {
|
||||
return conversationList.value.find((item) => item.run_id === run_id && !item.isTeamRunTask);
|
||||
};
|
||||
// 设置当前对话所有过程任务展开收起状态
|
||||
// 设置当前对话所有思考过程任务展开收起状态
|
||||
const setRunTaskCollapse = (teamRunTaskId: string, isCollapse: boolean) => {
|
||||
getAllRunTask(teamRunTaskId).forEach((item) => {
|
||||
item.content.isCollapse = isCollapse;
|
||||
@ -157,11 +188,6 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
const isFirstRunTask = (run_id: string): boolean => {
|
||||
return getFirstRunTask(lastTeamRunTaskId.value).run_id === run_id;
|
||||
};
|
||||
const isLastTeamRunTask = (data: MESSAGE.Answer) => {
|
||||
const { run_id } = data;
|
||||
const lastElement = conversationList.value[conversationList.value.length - 1];
|
||||
return lastElement && lastElement.run_id === run_id;
|
||||
};
|
||||
|
||||
// 过程节点开始
|
||||
const handleRunTaskStart = (data: MESSAGE.Answer) => {
|
||||
@ -184,7 +210,7 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
return (
|
||||
<>
|
||||
{isFirstRunTask(run_id) && (
|
||||
<div class="flex items-center">
|
||||
<div class="flex items-center mb-8px">
|
||||
<span class="font-family-medium color-#211F24 text-14px font-400 lh-22px mr-4px">智能思考</span>
|
||||
{isCollapse ? (
|
||||
<IconCaretUp
|
||||
@ -278,36 +304,39 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
return;
|
||||
}
|
||||
|
||||
// 含有思考过程,折叠思考过程,展示结果
|
||||
if (_hasRunTask) {
|
||||
setRunTaskCollapse(lastTeamRunTaskId.value, false);
|
||||
if (extra_data) {
|
||||
showRightView.value = true;
|
||||
rightViewData.value = extra_data.data;
|
||||
}
|
||||
|
||||
_targetTask.content.customRender = () => (
|
||||
<>
|
||||
<div v-html={md.render(output)} />
|
||||
{extra_data && (
|
||||
<div class="file-card mt-10px">
|
||||
<IconFile class="w-24px h-24px mr-16px color-#6D4CFE" />
|
||||
<div>
|
||||
<TextOverTips
|
||||
context={FILE_TYPE_MAP?.[extra_data.data?.file_type] ?? '-'}
|
||||
class="font-family-medium color-#211F24 text-14px font-400 lh-22px mb-4px"
|
||||
/>
|
||||
<span class="color-#939499 font-family-regular text-12px font-400 lh-22px">
|
||||
创建时间:{exactFormatTime(dayjs().unix())}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
} else {
|
||||
_targetTask.content.teamRunStatus = EnumTeamRunStatus.TeamRunCompleted;
|
||||
}
|
||||
|
||||
// 含有文档,右侧展示预览区域
|
||||
if (extra_data) {
|
||||
showRightView.value = true;
|
||||
rightViewInfo.value = extra_data.data?.[0] ?? {};
|
||||
_targetTask.content.customRender = () => (
|
||||
<>
|
||||
<div v-html={md.render(output)} />
|
||||
<div class="file-card mt-10px">
|
||||
<IconFile class="w-24px h-24px mr-16px color-#6D4CFE" />
|
||||
<div>
|
||||
<TextOverTips
|
||||
context={FILE_TYPE_MAP?.[extra_data.data?.file_type] ?? '-'}
|
||||
class="font-family-medium color-#211F24 text-14px font-400 lh-22px mb-4px"
|
||||
/>
|
||||
<span class="color-#939499 font-family-regular text-12px font-400 lh-22px">
|
||||
创建时间:{exactFormatTime(dayjs().unix())}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
_targetTask.footer = () => {
|
||||
const isShow = conversationList.value[conversationList.value.length - 1].teamRunTaskId === run_id;
|
||||
return (
|
||||
<div class="flex items-center">
|
||||
{!extra_data && (
|
||||
@ -320,7 +349,7 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
<IconCopy size={16} class="color-#737478 cursor-pointer mr-12px" />
|
||||
</Tooltip>
|
||||
)}
|
||||
{isLastTeamRunTask(data) && (
|
||||
{isShow && (
|
||||
<Tooltip title="重新生成" onClick={() => onRefresh(run_id)}>
|
||||
<IconRefresh size={16} class="color-#737478 cursor-pointer" />
|
||||
</Tooltip>
|
||||
@ -366,6 +395,6 @@ export default function useChatHandler({ initSse }): UseChatHandlerReturn {
|
||||
generateLoading,
|
||||
conversationList,
|
||||
showRightView,
|
||||
rightViewInfo,
|
||||
rightViewData,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user