openai_realtime/api/
session.rs1use 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 }
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 }
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 #[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 #[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}