

























@@ -117,6 +117,8 @@ function normalizeOpenAIRealtimeVoice(value: unknown): OpenAIRealtimeVoice | und
117117type RealtimeEvent = {
118118type: string;
119119delta?: string;
120+data?: string;
121+text?: string;
120122transcript?: string;
121123item_id?: string;
122124call_id?: string;
@@ -854,12 +856,14 @@ class OpenAIRealtimeVoiceBridge implements RealtimeVoiceBridge {
854856this.responseCreateInFlight = false;
855857return;
856858859+case "conversation.output_audio.delta":
857860case "response.audio.delta":
858861case "response.output_audio.delta": {
859-if (!event.delta) {
862+const audioDelta = event.delta ?? event.data;
863+if (!audioDelta) {
860864return;
861865}
862-const audio = base64ToBuffer(event.delta);
866+const audio = base64ToBuffer(audioDelta);
863867this.config.onAudio(audio);
864868if (event.item_id && event.item_id !== this.lastAssistantItemId) {
865869this.lastAssistantItemId = event.item_id;
@@ -878,32 +882,39 @@ class OpenAIRealtimeVoiceBridge implements RealtimeVoiceBridge {
878882}
879883return;
880884885+case "conversation.output_transcript.delta":
886+case "response.output_text.delta":
881887case "response.audio_transcript.delta":
882888case "response.output_audio_transcript.delta":
883889if (event.delta) {
884890this.config.onTranscript?.("assistant", event.delta, false);
885891}
886892return;
887893894+case "response.output_text.done":
888895case "response.audio_transcript.done":
889896case "response.output_audio_transcript.done":
890-if (event.transcript) {
891-this.config.onTranscript?.("assistant", event.transcript, true);
892-}
893-return;
894-895-case "conversation.item.input_audio_transcription.completed":
896-if (event.transcript) {
897-this.config.onTranscript?.("user", event.transcript, true);
897+{
898+const transcript = event.transcript ?? event.text;
899+if (transcript) {
900+this.config.onTranscript?.("assistant", transcript, true);
901+}
898902}
899903return;
900904905+case "conversation.input_transcript.delta":
901906case "conversation.item.input_audio_transcription.delta":
902907if (event.delta) {
903908this.config.onTranscript?.("user", event.delta, false);
904909}
905910return;
906911912+case "conversation.item.input_audio_transcription.completed":
913+if (event.transcript) {
914+this.config.onTranscript?.("user", event.transcript, true);
915+}
916+return;
917+907918case "response.cancelled":
908919case "response.done":
909920this.responseActive = false;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。