import { useState } from "react";
import TextInputBar from "./TextInputBar";
import VoiceInputBar from "./VoiceInputBar";
import { textChat } from "@/service/bot";
import { useTextChat } from "@/store/textChat";
import { TAgentDetail } from "@/types/agent";
import { delay } from "@/utils";
import { EAI_MODEL } from "@/consts/enum";
import { useUnload } from "@tarojs/taro";
interface Props {
character: TAgentDetail;
aiModel: EAI_MODEL;
}
let stopReceiveChunk: (()=> void)|undefined
export default ({ character, aiModel }: Props) => {
const [isVoice, setIsVoice] = useState(false);
const [disabled, setDisabled] = useState(false);
const {
pushRobotMessage,
updateRobotMessage,
getCurrentRobotMessage,
updateRobotReasoningMessage,
pushMessage,
updateMessage,
deleteMessage,
} = useTextChat();
// const currentRobotMessageId = useTextChat((state)=> state.currentRobotMessageId);
let myMessageId = '';
const handleTextInputBarSwitch = () => {
console.log("voice input on");
setIsVoice(true);
};
const handleVoiceInputBarSwitch = () => {
console.log("voice input off");
setIsVoice(false);
};
const chatWithGpt = async (message: string) => {
let currentRobotMessageId = ''
await delay(300);
setDisabled(true);
// 发起文本聊天
stopReceiveChunk = textChat({
agentId: character.agentId,
params: { message, model: aiModel },
onStart: () => {
currentRobotMessageId = pushRobotMessage({
content: "",
reasoningContent: "",
robot: {
avatar: character.avatarUrl ?? "",
name: character.name ?? "",
agentId: character.agentId ?? "",
},
});
},
onReceived: (m) => {
// console.log(m.reasoningContent,3333)
if (m.reasoningContent) {
updateRobotReasoningMessage(m.reasoningContent, currentRobotMessageId);
} else {
updateRobotMessage(m.content);
}
},
onFinished: () => {
console.log("回复完毕 ok");
const currentRobotMessage = getCurrentRobotMessage()
// 如果没有任何回答,则显示
if(!currentRobotMessage?.content?.length){
updateRobotMessage('服务器繁忙...')
}
setDisabled(false);
},
onError: () => {
deleteMessage(currentRobotMessageId);
setDisabled(false);
},
});
};
const handleVoiceSend = (message: string) => {
updateMessage(message, myMessageId);
chatWithGpt(message);
};
const handleOnSend = (message: string) => {
pushMessage(message);
chatWithGpt(message);
};
// 推一个自己的空气泡框
const handleBeforeSend = () => {
myMessageId = pushMessage("");
};
// 发生主意识别错误时,删除当前自己发出的气泡框
const handleVoiceError = () => {
deleteMessage(myMessageId);
};
useUnload(()=> {
if(stopReceiveChunk){
stopReceiveChunk()
}
})
if (isVoice) {
// 语音输入
return (
);
}
// 文本输入
return (
);
};