The agent directly outputs the results under the task model #9745 (#9746)

### What problem does this PR solve?

The agent directly outputs the results under the task model #9745

### Type of change


- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
balibabu
2025-08-28 11:43:40 +08:00
committed by GitHub
parent 2d101561f8
commit 7332f1d0f3
6 changed files with 153 additions and 73 deletions

View File

@ -18,13 +18,23 @@ import i18n from '@/locales/config';
import api from '@/utils/api';
import { get } from 'lodash';
import trim from 'lodash/trim';
import { useCallback, useContext, useEffect, useMemo, useState } from 'react';
import {
useCallback,
useContext,
useEffect,
useMemo,
useRef,
useState,
} from 'react';
import { useParams } from 'umi';
import { v4 as uuid } from 'uuid';
import { BeginId } from '../constant';
import { AgentChatLogContext } from '../context';
import { transferInputsArrayToObject } from '../form/begin-form/use-watch-change';
import { useSelectBeginNodeDataInputs } from '../hooks/use-get-begin-query';
import {
useIsTaskMode,
useSelectBeginNodeDataInputs,
} from '../hooks/use-get-begin-query';
import { BeginQuery } from '../interface';
import useGraphStore from '../store';
import { receiveMessageError } from '../utils';
@ -173,10 +183,22 @@ export function useSetUploadResponseData() {
};
}
export const buildRequestBody = (value: string = '') => {
const id = uuid();
const msgBody = {
id,
content: value.trim(),
role: MessageType.User,
};
return msgBody;
};
export const useSendAgentMessage = (
url?: string,
addEventList?: (data: IEventList, messageId: string) => void,
beginParams?: any[],
isShared?: boolean,
) => {
const { id: agentId } = useParams();
const { handleInputChange, value, setValue } = useHandleMessageInputChange();
@ -188,7 +210,9 @@ export const useSendAgentMessage = (
return answerList[0]?.message_id;
}, [answerList]);
// const { refetch } = useFetchAgent();
const isTaskMode = useIsTaskMode();
// const { refetch } = useFetchAgent(); // This will cause the shared page to also send a request
const { findReferenceByMessageId } = useFindMessageReference(answerList);
const prologue = useGetBeginNodePrologue();
@ -212,7 +236,14 @@ export const useSendAgentMessage = (
} = useSetUploadResponseData();
const sendMessage = useCallback(
async ({ message }: { message: Message; messages?: Message[] }) => {
async ({
message,
beginInputs,
}: {
message: Message;
messages?: Message[];
beginInputs?: BeginQuery[];
}) => {
const params: Record<string, unknown> = {
id: agentId,
};
@ -220,13 +251,13 @@ export const useSendAgentMessage = (
params.running_hint_text = i18n.t('flow.runningHintText', {
defaultValue: 'is running...🕞',
});
if (message.content) {
if (typeof message.content === 'string') {
const query = inputs;
params.query = message.content;
// params.message_id = message.id;
params.inputs = transferInputsArrayToObject(
beginParams ? beginParams : query,
beginInputs || beginParams || query,
); // begin operator inputs
params.files = uploadResponseList;
@ -289,12 +320,7 @@ export const useSendAgentMessage = (
const handlePressEnter = useCallback(() => {
if (trim(value) === '') return;
const id = uuid();
const msgBody = {
id,
content: value.trim(),
role: MessageType.User,
};
const msgBody = buildRequestBody(value);
if (done) {
setValue('');
sendMessage({
@ -315,6 +341,24 @@ export const useSendAgentMessage = (
scrollToBottom,
]);
const sendedTaskMessage = useRef<boolean>(false);
const sendMessageInTaskMode = useCallback(() => {
if (isShared || !isTaskMode || sendedTaskMessage.current) {
return;
}
const msgBody = buildRequestBody('');
sendMessage({
message: msgBody,
});
sendedTaskMessage.current = true;
}, [isShared, isTaskMode, sendMessage]);
useEffect(() => {
sendMessageInTaskMode();
}, [sendMessageInTaskMode]);
useEffect(() => {
const { content, id } = findMessageFromList(answerList);
const inputAnswer = findInputFromList(answerList);
@ -328,12 +372,22 @@ export const useSendAgentMessage = (
}, [answerList, addNewestOneAnswer]);
useEffect(() => {
if (isTaskMode) {
return;
}
if (prologue) {
addNewestOneAnswer({
answer: prologue,
});
}
}, [addNewestOneAnswer, agentId, prologue, send, sendFormMessage]);
}, [
addNewestOneAnswer,
agentId,
isTaskMode,
prologue,
send,
sendFormMessage,
]);
useEffect(() => {
if (typeof addEventList === 'function') {
@ -365,5 +419,6 @@ export const useSendAgentMessage = (
findReferenceByMessageId,
appendUploadResponseList,
addNewestOneAnswer,
sendMessage,
};
};