Skip to main content

openresponses_rust/types/
requests.rs

1use super::{enums::*, items::*, tools::*};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6#[serde(untagged)]
7pub enum Input {
8    Single(String),
9    Items(Vec<Item>),
10}
11
12impl Default for Input {
13    fn default() -> Self {
14        Input::Items(Vec::new())
15    }
16}
17
18#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
19pub struct CreateResponseBody {
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub model: Option<String>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub input: Option<Input>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub previous_response_id: Option<String>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub include: Option<Vec<IncludeOption>>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub tools: Option<Vec<Tool>>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub tool_choice: Option<ToolChoiceParam>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub metadata: Option<HashMap<String, String>>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub text: Option<TextParam>,
36    #[serde(skip_serializing_if = "Option::is_none")]
37    pub temperature: Option<f64>,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub top_p: Option<f64>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub presence_penalty: Option<f64>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub frequency_penalty: Option<f64>,
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub parallel_tool_calls: Option<bool>,
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub stream: Option<bool>,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub stream_options: Option<StreamOptions>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub background: Option<bool>,
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub max_output_tokens: Option<i32>,
54    #[serde(skip_serializing_if = "Option::is_none")]
55    pub max_tool_calls: Option<i32>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub reasoning: Option<ReasoningConfig>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub safety_identifier: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub prompt_cache_key: Option<String>,
62    #[serde(default)]
63    pub truncation: Truncation,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub instructions: Option<String>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub store: Option<bool>,
68    #[serde(default)]
69    pub service_tier: ServiceTier,
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub top_logprobs: Option<i32>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
75pub struct TextParam {
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub format: Option<TextFormat>,
78    #[serde(default)]
79    pub verbosity: Verbosity,
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
83#[serde(tag = "type")]
84pub enum TextFormat {
85    #[serde(rename = "text")]
86    Text,
87    #[serde(rename = "json_object")]
88    JsonObject,
89    #[serde(rename = "json_schema")]
90    JsonSchema {
91        name: String,
92        #[serde(skip_serializing_if = "Option::is_none")]
93        description: Option<String>,
94        #[serde(skip_serializing_if = "Option::is_none")]
95        schema: Option<serde_json::Value>,
96        #[serde(skip_serializing_if = "Option::is_none")]
97        strict: Option<bool>,
98    },
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
102pub struct StreamOptions {
103    #[serde(rename = "include_obfuscation")]
104    pub include_obfuscation: Option<bool>,
105}
106
107#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
108pub struct ReasoningConfig {
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub effort: Option<ReasoningEffort>,
111    #[serde(skip_serializing_if = "Option::is_none")]
112    pub summary: Option<ReasoningSummary>,
113}