openai_realtime/api/
session.rs

1use crate::api::model::Model;
2use crate::api::voice::Voice;
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6#[derive(Debug, Serialize, Deserialize)]
7pub struct CreateSessionRequest {
8    pub model: Model,
9    pub voice: Voice,
10}
11
12#[derive(Debug, Serialize, Deserialize, Clone)]
13pub struct TurnDetection {
14    #[serde(rename = "type")]
15    pub td_type: String,
16
17    pub threshold: f32,
18
19    pub prefix_padding_ms: i64,
20    pub silence_duration_ms: i64,
21    pub create_response: bool,
22    pub interrupt_response: bool,
23}
24
25#[derive(Debug, Serialize, Deserialize, Clone)]
26#[serde(rename_all = "lowercase")]
27pub enum AudioFormat {
28    PCM16,
29}
30
31#[derive(Debug, Serialize, Deserialize, Clone)]
32#[serde(rename_all = "lowercase")]
33pub enum Modality {
34    Text,
35    Audio,
36}
37
38#[derive(Debug, Serialize, Deserialize, Clone)]
39#[serde(rename_all = "lowercase")]
40pub enum ToolChoice {
41    Auto,
42    // TODO:
43}
44
45#[derive(Debug, Serialize, Deserialize, Clone)]
46pub struct ClientSecret {
47    pub value: String,
48    pub expires_at: i64,
49}
50
51#[derive(Debug, Serialize, Deserialize, Clone)]
52pub struct Tool {
53    // TODO: !
54}
55
56#[derive(Debug, Serialize, Deserialize)]
57#[serde(rename_all = "lowercase")]
58pub enum Tracing {
59    Auto,
60}
61
62#[derive(Debug, Serialize, Deserialize, Default)]
63pub struct SessionUpdateEvent {
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub modalities: Option<Vec<Modality>>,
66
67    ///  To clear a field like instructions, pass an empty string.
68    #[serde(skip_serializing_if = "Option::is_none")]
69    pub instructions: Option<String>,
70
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub voice: Option<Voice>,
73
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub output_audio_format: Option<AudioFormat>,
76
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub input_audio_format: Option<AudioFormat>,
79
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub temperature: Option<f32>,
82
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub speed: Option<f32>,
85
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub tracing: Option<Tracing>,
88
89    #[serde(skip_serializing_if = "Option::is_none")]
90    pub tool_choice: Option<ToolChoice>,
91
92    #[serde(skip_serializing_if = "Option::is_none")]
93    pub turn_detection: Option<TurnDetection>,
94}
95
96#[derive(Debug, Serialize, Deserialize, Clone)]
97#[serde(rename_all = "snake_case")]
98#[serde(deny_unknown_fields)]
99pub struct Session {
100    pub id: String,
101
102    pub object: String,
103
104    pub expires_at: i64,
105
106    // TODO: !
107    #[serde(skip_serializing_if = "Option::is_none")]
108    pub input_audio_noise_reduction: Option<Value>,
109
110    pub turn_detection: TurnDetection,
111
112    pub input_audio_format: AudioFormat,
113
114    #[serde(skip_serializing_if = "Option::is_none")]
115    pub input_audio_transcription: Option<Value>,
116
117    pub include: Value,
118
119    pub model: String,
120
121    pub modalities: Vec<Modality>,
122
123    pub instructions: String,
124
125    pub voice: Voice,
126
127    pub output_audio_format: AudioFormat,
128
129    pub tool_choice: ToolChoice,
130
131    pub temperature: f32,
132
133    pub max_response_output_tokens: Value,
134
135    pub speed: f32,
136
137    pub tracing: Value,
138
139    pub tools: Tool,
140
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub client_secret: Option<ClientSecret>,
143}