openai_types/responses/
tools.rs1use serde::{Deserialize, Serialize};
5
6use crate::chat::WebSearchUserLocation;
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
12#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
13pub struct FunctionTool {
14 pub name: String,
16 #[serde(default)]
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub parameters: Option<serde_json::Value>,
20 #[serde(default)]
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub strict: Option<bool>,
24 #[serde(default)]
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub description: Option<String>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
32#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
33pub struct ResponseRankingOptions {
34 #[serde(default)]
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub score_threshold: Option<f64>,
38 #[serde(default)]
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub ranker: Option<String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
46#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
47#[serde(tag = "type")]
48#[non_exhaustive]
49pub enum ResponseTool {
50 #[serde(rename = "function")]
52 Function {
53 name: String,
55 #[serde(default)]
57 #[serde(skip_serializing_if = "Option::is_none")]
58 description: Option<String>,
59 #[serde(default)]
61 #[serde(skip_serializing_if = "Option::is_none")]
62 parameters: Option<serde_json::Value>,
63 #[serde(default)]
65 #[serde(skip_serializing_if = "Option::is_none")]
66 strict: Option<bool>,
67 },
68 #[serde(rename = "web_search")]
70 WebSearch {
71 #[serde(default)]
73 #[serde(skip_serializing_if = "Option::is_none")]
74 search_context_size: Option<String>,
75 #[serde(default)]
77 #[serde(skip_serializing_if = "Option::is_none")]
78 user_location: Option<WebSearchUserLocation>,
79 },
80 #[serde(rename = "file_search")]
82 FileSearch {
83 vector_store_ids: Vec<String>,
85 #[serde(default)]
87 #[serde(skip_serializing_if = "Option::is_none")]
88 max_num_results: Option<i64>,
89 #[serde(default)]
91 #[serde(skip_serializing_if = "Option::is_none")]
92 ranking_options: Option<ResponseRankingOptions>,
93 },
94 #[serde(rename = "code_interpreter")]
96 CodeInterpreter {
97 #[serde(default)]
99 #[serde(skip_serializing_if = "Option::is_none")]
100 container: Option<String>,
101 },
102 #[serde(rename = "computer")]
104 ComputerUse {},
105 #[serde(rename = "mcp")]
107 Mcp {
108 server_label: String,
110 #[serde(default)]
112 #[serde(skip_serializing_if = "Option::is_none")]
113 server_url: Option<String>,
114 #[serde(default)]
116 #[serde(skip_serializing_if = "Option::is_none")]
117 allowed_tools: Option<Vec<String>>,
118 #[serde(default)]
120 #[serde(skip_serializing_if = "Option::is_none")]
121 require_approval: Option<serde_json::Value>,
122 },
123 #[serde(rename = "image_generation")]
125 ImageGeneration {
126 #[serde(default)]
128 #[serde(skip_serializing_if = "Option::is_none")]
129 model: Option<String>,
130 #[serde(default)]
132 #[serde(skip_serializing_if = "Option::is_none")]
133 quality: Option<String>,
134 #[serde(default)]
136 #[serde(skip_serializing_if = "Option::is_none")]
137 size: Option<String>,
138 },
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize)]
143#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
144#[serde(untagged)]
145#[non_exhaustive]
146pub enum ResponseToolChoice {
147 Mode(String),
149 Named {
151 #[serde(rename = "type")]
153 type_: String,
154 function: ResponseToolChoiceFunction,
156 },
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
161#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
162pub struct ResponseToolChoiceFunction {
163 pub name: String,
165}
166
167#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
171#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
172#[serde(untagged)]
173#[non_exhaustive]
174pub enum ToolChoiceParam {
175 Mode(ToolChoiceOptions),
177 Function(ToolChoiceFunction),
179}
180
181#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
183#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
184#[serde(rename_all = "snake_case")]
185#[non_exhaustive]
186pub enum ToolChoiceOptions {
187 None,
189 Auto,
191 Required,
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
197#[cfg_attr(feature = "structured", derive(schemars::JsonSchema))]
198pub struct ToolChoiceFunction {
199 pub name: String,
201 #[serde(rename = "type")]
203 #[serde(default = "default_function_type")]
204 pub type_: String,
205}
206
207fn default_function_type() -> String {
208 "function".to_string()
209}