|
@@ -127,7 +127,6 @@ export function RealtimeChat({
|
|
|
|
|
|
|
|
const handleResponse = async (response: RTResponse) => {
|
|
const handleResponse = async (response: RTResponse) => {
|
|
|
for await (const item of response) {
|
|
for await (const item of response) {
|
|
|
- console.log("handleResponse", item);
|
|
|
|
|
if (item.type === "message" && item.role === "assistant") {
|
|
if (item.type === "message" && item.role === "assistant") {
|
|
|
const botMessage = createMessage({
|
|
const botMessage = createMessage({
|
|
|
role: item.role,
|
|
role: item.role,
|
|
@@ -156,12 +155,16 @@ export function RealtimeChat({
|
|
|
};
|
|
};
|
|
|
await Promise.all([textTask(), audioTask()]);
|
|
await Promise.all([textTask(), audioTask()]);
|
|
|
}
|
|
}
|
|
|
|
|
+ // update message.content
|
|
|
|
|
+ chatStore.updateTargetSession((session) => {
|
|
|
|
|
+ session.messages = session.messages.concat();
|
|
|
|
|
+ });
|
|
|
}
|
|
}
|
|
|
// upload audio get audio_url
|
|
// upload audio get audio_url
|
|
|
const blob = audioHandlerRef.current?.savePlayFile();
|
|
const blob = audioHandlerRef.current?.savePlayFile();
|
|
|
uploadImage(blob).then((audio_url) => {
|
|
uploadImage(blob).then((audio_url) => {
|
|
|
botMessage.audio_url = audio_url;
|
|
botMessage.audio_url = audio_url;
|
|
|
- botMessage.date = new Date().toLocaleString();
|
|
|
|
|
|
|
+ // botMessage.date = new Date().toLocaleString();
|
|
|
// update text and audio_url
|
|
// update text and audio_url
|
|
|
chatStore.updateTargetSession((session) => {
|
|
chatStore.updateTargetSession((session) => {
|
|
|
session.messages = session.messages.concat();
|
|
session.messages = session.messages.concat();
|
|
@@ -174,16 +177,28 @@ export function RealtimeChat({
|
|
|
const handleInputAudio = async (item: RTInputAudioItem) => {
|
|
const handleInputAudio = async (item: RTInputAudioItem) => {
|
|
|
audioHandlerRef.current?.stopStreamingPlayback();
|
|
audioHandlerRef.current?.stopStreamingPlayback();
|
|
|
await item.waitForCompletion();
|
|
await item.waitForCompletion();
|
|
|
- const { audioStartMillis, audioEndMillis } = item;
|
|
|
|
|
- // TODO, save input audio_url, and update session
|
|
|
|
|
- console.log("handleInputAudio", item, audioStartMillis, audioEndMillis);
|
|
|
|
|
- const userMessage = createMessage({
|
|
|
|
|
- role: "user",
|
|
|
|
|
- content: item.transcription,
|
|
|
|
|
- });
|
|
|
|
|
- chatStore.updateTargetSession(session, (session) => {
|
|
|
|
|
- session.messages = session.messages.concat([userMessage]);
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ if (item.transcription) {
|
|
|
|
|
+ const userMessage = createMessage({
|
|
|
|
|
+ role: "user",
|
|
|
|
|
+ content: item.transcription,
|
|
|
|
|
+ });
|
|
|
|
|
+ chatStore.updateTargetSession(session, (session) => {
|
|
|
|
|
+ session.messages = session.messages.concat([userMessage]);
|
|
|
|
|
+ });
|
|
|
|
|
+ // save input audio_url, and update session
|
|
|
|
|
+ const { audioStartMillis, audioEndMillis } = item;
|
|
|
|
|
+ // upload audio get audio_url
|
|
|
|
|
+ const blob = audioHandlerRef.current?.saveRecordFile(
|
|
|
|
|
+ audioStartMillis,
|
|
|
|
|
+ audioEndMillis,
|
|
|
|
|
+ );
|
|
|
|
|
+ uploadImage(blob).then((audio_url) => {
|
|
|
|
|
+ userMessage.audio_url = audio_url;
|
|
|
|
|
+ chatStore.updateTargetSession((session) => {
|
|
|
|
|
+ session.messages = session.messages.concat();
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const toggleRecording = async () => {
|
|
const toggleRecording = async () => {
|