use serde_json::Value;
#[derive(Debug, Clone, PartialEq)]
#[non_exhaustive]
pub enum RtEvent {
AudioDelta(Vec<u8>), TextDelta(String),
UserTranscriptDelta(String),
UserTranscriptFinal(String),
AssistantTranscriptDelta(String),
PartDone(Value),
ResponseDone(Value),
Completed,
SessionCreated(Value),
Error(String),
Other(Value),
Closed,
Idle,
}
#[derive(Debug, Clone, Copy)]
pub enum RealtimeProfile {
S2S,
TRANSCRIBE,
TTS,
}
#[derive(Clone, Debug)]
pub struct RealtimeFeatures {
pub profile: RealtimeProfile,
pub enable_conversation: bool,
pub enable_transcribe: bool,
pub enable_input_transcription: bool,
pub enable_output_audio_transcript: bool,
pub use_server_vad: bool,
}
impl Default for RealtimeFeatures {
fn default() -> Self {
Self {
profile: RealtimeProfile::S2S,
enable_conversation: false,
enable_transcribe: false,
enable_input_transcription: false,
enable_output_audio_transcript: false,
use_server_vad: false,
}
}
}
impl RealtimeFeatures {
pub fn from_profile(profile: RealtimeProfile) -> Self {
match profile {
RealtimeProfile::S2S => Self {
profile,
enable_conversation: true,
enable_transcribe: false,
enable_input_transcription: false,
enable_output_audio_transcript: false,
use_server_vad: false,
},
RealtimeProfile::TRANSCRIBE => Self {
profile,
enable_conversation: false,
enable_transcribe: true,
enable_input_transcription: true,
enable_output_audio_transcript: false,
use_server_vad: false,
},
RealtimeProfile::TTS => Self {
profile,
enable_conversation: true,
enable_transcribe: false,
enable_input_transcription: false,
enable_output_audio_transcript: false,
use_server_vad: false,
},
}
}
}