import { useState } from "react";
import TextInputBar from "./TextInputBar";
import VoiceInputBar from "./VoiceInputBar";
import { textChat } from "@/service/bot";
import { TMessage,TRobotMessage, useTextChat } from "@/store/textChat";
import { TAgentDetail } from "@/types/agent";
import { delay, getLoginId } from "@/utils";
import { EAI_MODEL } from "@/consts/enum";
import { useUnload } from "@tarojs/taro";
import { EChatRole, EContentType } from "@/types/bot";
import { saveMessageToServer } from './message'
interface Props {
agent: TAgentDetail | null;
aiModel: EAI_MODEL;
histories: (TMessage|TRobotMessage)[];
setShowWelcome: (b: boolean) => void;
}
let stopReceiveChunk: (() => void) | undefined;
export default ({ agent, setShowWelcome, histories }: Props) => {
const [isVoice, setIsVoice] = useState(false);
const [disabled, setDisabled] = useState(false);
const {
pushRobotMessage,
updateRobotMessage,
getCurrentRobotMessage,
updateRobotReasoningMessage,
pushMessage,
updateMessage,
deleteMessage,
} = useTextChat();
let myMsgUk = '';
let mySessionId = '';
const handleTextInputBarSwitch = () => {
console.log("voice input on");
setIsVoice(true);
};
const handleVoiceInputBarSwitch = () => {
console.log("voice input off");
setIsVoice(false);
};
const chatWithGpt = async (message: string, sessionId: string, msgUk: string) => {
setShowWelcome(false)
let currentRobotMsgUk = "";
await delay(300);
setDisabled(true);
if (!agent?.agentId) {
return;
}
const loginId = getLoginId();
if (!loginId) {
return;
}
// const greeting = "欢迎光临我的智能体,你想问什么?";
// {
// content: greeting,
// contentType: EContentType.TextPlain,
// role: EChatRole.System,
// },
const newMsg = {
content: message,
contentType: EContentType.TextPlain,
role: EChatRole.User,
}
saveMessageToServer({
loginId,
messages: [{
...newMsg,
isStreaming: false,
msgUk,
}],
agentId: agent.agentId,
sessionId,
})
// 发起文本聊天
stopReceiveChunk = textChat({
params: {
agentId: agent.agentId,
isEnableOutputAudioStream: false,
isEnableSearch: false,
isEnableThinking: false,
loginId,
messages: [newMsg],
sessionId,
},
onStart: () => {
currentRobotMsgUk = pushRobotMessage({
role: EChatRole.Assistant,
saveStatus: 2,
content: "",
reasoningContent: "",
robot: {
avatar: agent?.avatarUrl ?? "",
name: agent?.name ?? "",
agentId: agent?.agentId ?? "",
},
});
},
onReceived: (m) => {
console.log("received:", m);
if (m.reasoningContent) {
updateRobotReasoningMessage(
m.reasoningContent,
currentRobotMsgUk
);
} else {
updateRobotMessage(m.content);
}
},
onFinished: () => {
console.log("回复完毕 ok");
const currentRobotMessage = getCurrentRobotMessage();
console.log(currentRobotMessage,333)
if(!agent.agentId){
return
}
setDisabled(false);
// 如果没有任何回答,则显示
if (!currentRobotMessage?.content?.length) {
updateRobotMessage("服务器繁忙...");
return
}
saveMessageToServer({
loginId,
messages: [{
content: currentRobotMessage.content,
contentType: EContentType.TextPlain,
isStreaming: false,
role: currentRobotMessage.role,
msgUk: currentRobotMessage.msgUk,
}],
agentId: agent.agentId,
sessionId,
})
},
onError: () => {
deleteMessage(currentRobotMsgUk);
setDisabled(false);
},
});
};
const handleVoiceSend = (message: string) => {
updateMessage(message, myMsgUk);
chatWithGpt(message, mySessionId, myMsgUk);
};
const handleOnSend = async (message: string) => {
if(!agent?.agentId){
return
}
const {sessionId, msgUk} = pushMessage(message);
chatWithGpt(message, sessionId, msgUk);
};
// 推一个自己的空气泡框
const handleBeforeSend = () => {
if(!agent?.agentId){
return
}
const {sessionId, msgUk} = pushMessage("");
myMsgUk = msgUk
mySessionId = sessionId
};
// 发生主意识别错误时,删除当前自己发出的气泡框
const handleVoiceError = () => {
deleteMessage(myMsgUk);
};
useUnload(() => {
if (stopReceiveChunk) {
stopReceiveChunk();
}
});
if (isVoice) {
console.log(agent)
// 语音输入
return (
);
}
// 文本输入
return (
);
};