use serde::{Deserialize, Serialize};
use crate::types::realtime::{NoiseReductionType, RealtimeServerEventError};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationInputTranscription {
pub model: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationNoiseReduction {
pub r#type: NoiseReductionType,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationInputAudio {
pub transcription: Option<RealtimeTranslationInputTranscription>,
pub noise_reduction: Option<RealtimeTranslationNoiseReduction>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationOutputAudio {
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationAudio {
#[serde(skip_serializing_if = "Option::is_none")]
pub input: Option<RealtimeTranslationInputAudio>,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<RealtimeTranslationOutputAudio>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationSession {
pub id: String,
pub r#type: String,
pub expires_at: u64,
pub model: String,
pub audio: RealtimeTranslationAudio,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationSessionCreateRequest {
pub model: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<RealtimeTranslationAudio>,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationSessionUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub audio: Option<RealtimeTranslationAudio>,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum RealtimeTranslationClientSecretExpiresAnchor {
#[default]
CreatedAt,
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientSecretExpiresAfter {
#[serde(skip_serializing_if = "Option::is_none")]
pub anchor: Option<RealtimeTranslationClientSecretExpiresAnchor>,
#[serde(skip_serializing_if = "Option::is_none")]
pub seconds: Option<u32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientSecretCreateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<RealtimeTranslationClientSecretExpiresAfter>,
pub session: RealtimeTranslationSessionCreateRequest,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientSecretCreateResponse {
pub value: String,
pub expires_at: u64,
pub session: RealtimeTranslationSession,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientEventSessionUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
pub session: RealtimeTranslationSessionUpdateRequest,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientEventInputAudioBufferAppend {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
pub audio: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationClientEventSessionClose {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum RealtimeTranslationClientEvent {
#[serde(rename = "session.update")]
SessionUpdate(RealtimeTranslationClientEventSessionUpdate),
#[serde(rename = "session.input_audio_buffer.append")]
InputAudioBufferAppend(RealtimeTranslationClientEventInputAudioBufferAppend),
#[serde(rename = "session.close")]
SessionClose(RealtimeTranslationClientEventSessionClose),
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum RealtimeTranslationAudioFormat {
PCM16,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionCreated {
pub event_id: String,
pub session: RealtimeTranslationSession,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionUpdated {
pub event_id: String,
pub session: RealtimeTranslationSession,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionClosed {
pub event_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionInputTranscriptDelta {
pub event_id: String,
pub delta: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub elapsed_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionOutputTranscriptDelta {
pub event_id: String,
pub delta: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub elapsed_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeTranslationServerEventSessionOutputAudioDelta {
pub event_id: String,
pub delta: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sample_rate: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub channels: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub format: Option<RealtimeTranslationAudioFormat>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub elapsed_ms: Option<u64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum RealtimeTranslationServerEvent {
#[serde(rename = "error")]
Error(RealtimeServerEventError),
#[serde(rename = "session.created")]
SessionCreated(RealtimeTranslationServerEventSessionCreated),
#[serde(rename = "session.updated")]
SessionUpdated(RealtimeTranslationServerEventSessionUpdated),
#[serde(rename = "session.closed")]
SessionClosed(RealtimeTranslationServerEventSessionClosed),
#[serde(rename = "session.input_transcript.delta")]
SessionInputTranscriptDelta(RealtimeTranslationServerEventSessionInputTranscriptDelta),
#[serde(rename = "session.output_transcript.delta")]
SessionOutputTranscriptDelta(RealtimeTranslationServerEventSessionOutputTranscriptDelta),
#[serde(rename = "session.output_audio.delta")]
SessionOutputAudioDelta(RealtimeTranslationServerEventSessionOutputAudioDelta),
}