openresponses_rust/types/
responses.rs1use super::{enums::*, items::*, tools::*};
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
6pub struct ResponseResource {
7 pub id: String,
8 pub object: String,
9 pub created_at: i64,
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub completed_at: Option<i64>,
12 pub status: String,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub incomplete_details: Option<IncompleteDetails>,
15 pub model: String,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub previous_response_id: Option<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub instructions: Option<String>,
20 pub output: Vec<Item>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub error: Option<Error>,
23 pub tools: Vec<Tool>,
24 pub tool_choice: ToolChoiceParam,
25 pub truncation: Truncation,
26 pub parallel_tool_calls: bool,
27 pub text: TextField,
28 pub top_p: f64,
29 pub presence_penalty: f64,
30 pub frequency_penalty: f64,
31 pub top_logprobs: i32,
32 pub temperature: f64,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub reasoning: Option<ReasoningOutput>,
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub usage: Option<Usage>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 pub max_output_tokens: Option<i32>,
39 #[serde(skip_serializing_if = "Option::is_none")]
40 pub max_tool_calls: Option<i32>,
41 pub store: bool,
42 pub background: bool,
43 pub service_tier: String,
44 pub metadata: HashMap<String, String>,
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub safety_identifier: Option<String>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub prompt_cache_key: Option<String>,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
52pub struct IncompleteDetails {
53 pub reason: String,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57pub struct Error {
58 pub code: String,
59 pub message: String,
60 #[serde(skip_serializing_if = "Option::is_none")]
61 pub param: Option<String>,
62 #[serde(rename = "type")]
63 pub error_type: ErrorType,
64}
65
66#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
67pub struct TextField {
68 pub format: TextFormatOutput,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub verbosity: Option<Verbosity>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
74#[serde(tag = "type")]
75pub enum TextFormatOutput {
76 #[serde(rename = "text")]
77 Text,
78 #[serde(rename = "json_object")]
79 JsonObject,
80 #[serde(rename = "json_schema")]
81 JsonSchema {
82 name: String,
83 description: String,
84 schema: serde_json::Value,
85 strict: bool,
86 },
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
90pub struct ReasoningOutput {
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub effort: Option<ReasoningEffort>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub summary: Option<ReasoningSummary>,
95}
96
97#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
98pub struct Usage {
99 pub input_tokens: i32,
100 pub output_tokens: i32,
101 pub total_tokens: i32,
102 pub input_tokens_details: InputTokensDetails,
103 pub output_tokens_details: OutputTokensDetails,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
107pub struct InputTokensDetails {
108 pub cached_tokens: i32,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
112pub struct OutputTokensDetails {
113 pub reasoning_tokens: i32,
114}