Feat: The agent's external page should be able to fill in the begin parameter after being reset in task mode #9745 (#9982)

### What problem does this PR solve?

Feat: The agent's external page should be able to fill in the begin
parameter after being reset in task mode #9745

### Type of change


- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
balibabu
2025-09-08 18:59:51 +08:00
committed by GitHub
parent e8018fde83
commit 2616f651c9
14 changed files with 234 additions and 880 deletions

View File

@ -1,13 +1,16 @@
import { SharedFrom } from '@/constants/chat';
import { useSetModalState } from '@/hooks/common-hooks';
import { useFetchExternalAgentInputs } from '@/hooks/use-agent-request';
import { IEventList } from '@/hooks/use-send-message';
import {
buildRequestBody,
useSendAgentMessage,
} from '@/pages/agent/chat/use-send-agent-message';
import { isEmpty } from 'lodash';
import trim from 'lodash/trim';
import { useCallback, useState } from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
import { useSearchParams } from 'umi';
import { AgentDialogueMode } from '../constant';
export const useSendButtonDisabled = (value: string) => {
return trim(value) === '';
@ -35,12 +38,15 @@ export const useGetSharedChatSearchParams = () => {
export const useSendNextSharedMessage = (
addEventList: (data: IEventList, messageId: string) => void,
isTaskMode: boolean,
) => {
const { from, sharedId: conversationId } = useGetSharedChatSearchParams();
const url = `/api/v1/${from === SharedFrom.Agent ? 'agentbots' : 'chatbots'}/${conversationId}/completions`;
const { data: inputsData } = useFetchExternalAgentInputs();
const [params, setParams] = useState<any[]>([]);
const sendedTaskMessage = useRef<boolean>(false);
const isTaskMode = inputsData.mode === AgentDialogueMode.Task;
const {
visible: parameterDialogVisible,
@ -73,10 +79,27 @@ export const useSendNextSharedMessage = (
[hideParameterDialog, isTaskMode, ret],
);
const runTask = useCallback(() => {
if (
isTaskMode &&
isEmpty(inputsData?.inputs) &&
!sendedTaskMessage.current
) {
ok([]);
sendedTaskMessage.current = true;
}
}, [inputsData?.inputs, isTaskMode, ok]);
useEffect(() => {
runTask();
}, [runTask]);
return {
...ret,
hasError: false,
parameterDialogVisible,
inputsData,
isTaskMode,
hideParameterDialog,
showParameterDialog,
ok,

View File

@ -5,10 +5,7 @@ import MessageItem from '@/components/next-message-item';
import PdfDrawer from '@/components/pdf-drawer';
import { useClickDrawer } from '@/components/pdf-drawer/hooks';
import { MessageType } from '@/constants/chat';
import {
useFetchExternalAgentInputs,
useUploadCanvasFileWithProgress,
} from '@/hooks/use-agent-request';
import { useUploadCanvasFileWithProgress } from '@/hooks/use-agent-request';
import { cn } from '@/lib/utils';
import i18n from '@/locales/config';
import DebugContent from '@/pages/agent/debug-content';
@ -18,7 +15,6 @@ import { useSendButtonDisabled } from '@/pages/chat/hooks';
import { buildMessageUuidWithRole } from '@/utils/chat';
import { isEmpty } from 'lodash';
import React, { forwardRef, useCallback } from 'react';
import { AgentDialogueMode } from '../constant';
import {
useGetSharedChatSearchParams,
useSendNextSharedMessage,
@ -43,9 +39,6 @@ const ChatContainer = () => {
clearEventList,
} = useCacheChatLog();
const { data: inputsData } = useFetchExternalAgentInputs();
const isTaskMode = inputsData.mode === AgentDialogueMode.Task;
const {
handlePressEnter,
handleInputChange,
@ -55,6 +48,8 @@ const ChatContainer = () => {
messageContainerRef,
derivedMessages,
hasError,
inputsData,
isTaskMode,
stopOutputMessage,
findReferenceByMessageId,
appendUploadResponseList,
@ -64,7 +59,8 @@ const ChatContainer = () => {
addNewestOneAnswer,
ok,
resetSession,
} = useSendNextSharedMessage(addEventList, isTaskMode);
} = useSendNextSharedMessage(addEventList);
const { buildInputList, handleOk, isWaitting } = useAwaitCompentData({
derivedMessages,
sendFormMessage,
@ -72,6 +68,12 @@ const ChatContainer = () => {
});
const sendDisabled = useSendButtonDisabled(value);
const showBeginParameterDialog = useCallback(() => {
if (inputsData && inputsData.inputs && !isEmpty(inputsData.inputs)) {
showParameterDialog();
}
}, [inputsData, showParameterDialog]);
const handleUploadFile: NonNullable<FileUploadProps['onUpload']> =
useCallback(
async (files, options) => {
@ -96,10 +98,8 @@ const ChatContainer = () => {
}, [inputsData.prologue, addNewestOneAnswer, isTaskMode]);
React.useEffect(() => {
if (inputsData && inputsData.inputs && !isEmpty(inputsData.inputs)) {
showParameterDialog();
}
}, [inputsData, showParameterDialog]);
showBeginParameterDialog();
}, [showBeginParameterDialog]);
const handleInputsModalOk = (params: any[]) => {
ok(params);
@ -107,10 +107,14 @@ const ChatContainer = () => {
const handleReset = () => {
resetSession();
clearEventList();
if (isTaskMode) {
showBeginParameterDialog();
}
};
if (!conversationId) {
return <div>empty</div>;
}
return (
<>
<EmbedContainer