async_openai/types/realtime/
session_resource.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize, Clone)]
4pub enum AudioFormat {
5 #[serde(rename = "pcm16")]
6 PCM16,
7 #[serde(rename = "g711-ulaw")]
8 G711ULAW,
9 #[serde(rename = "g711-alaw")]
10 G711ALAW,
11}
12
13#[derive(Debug, Serialize, Deserialize, Clone)]
14pub struct AudioTranscription {
15 pub enabled: bool,
17 pub model: String,
19}
20
21#[derive(Debug, Serialize, Deserialize, Clone)]
22#[serde(tag = "type")]
23pub enum TurnDetection {
24 #[serde(rename = "server_vad")]
26 ServerVAD {
27 threshold: f32,
29 prefix_padding_ms: u32,
31 silence_duration_ms: u32,
33 },
34}
35
36#[derive(Debug, Serialize, Deserialize, Clone)]
37pub enum MaxResponseOutputTokens {
38 #[serde(rename = "inf")]
39 Inf,
40 #[serde(untagged)]
41 Num(u16),
42}
43
44#[derive(Debug, Serialize, Deserialize, Clone)]
45#[serde(tag = "type")]
46pub enum ToolDefinition {
47 #[serde(rename = "function")]
48 Function {
49 name: String,
51 description: String,
53 parameters: serde_json::Value,
55 },
56}
57
58#[derive(Debug, Serialize, Deserialize, Clone)]
59#[serde(rename_all = "lowercase")]
60pub enum FunctionType {
61 Function,
62}
63
64#[derive(Debug, Serialize, Deserialize, Clone)]
65#[serde(rename_all = "lowercase")]
66pub enum ToolChoice {
67 Auto,
68 None,
69 Required,
70 #[serde(untagged)]
71 Function {
72 r#type: FunctionType,
73 name: String,
74 },
75}
76
77#[derive(Debug, Serialize, Deserialize, Clone)]
78#[serde(rename_all = "lowercase")]
79pub enum RealtimeVoice {
80 Alloy,
81 Shimmer,
82 Echo,
83}
84
85#[derive(Debug, Serialize, Deserialize, Clone, Default)]
86pub struct SessionResource {
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub model: Option<String>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub modalities: Option<Vec<String>>,
94
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub instructions: Option<String>,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub voice: Option<RealtimeVoice>,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub input_audio_format: Option<AudioFormat>,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub output_audio_format: Option<AudioFormat>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub input_audio_transcription: Option<AudioTranscription>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub turn_detection: Option<TurnDetection>,
118
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub tools: Option<Vec<ToolDefinition>>,
122
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub tool_choice: Option<ToolChoice>,
126
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub temperature: Option<f32>,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
135 pub max_response_output_tokens: Option<MaxResponseOutputTokens>,
136}