gproxy_protocol/protocol/openai/
compact.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::common::*;
6use super::generate_content::{
7 ComputerScreenshot, ResponseInput, ResponseInputContentPart, ResponseMessageItemType,
8 ResponseOutputContentPart, ResponseUsage, TypedResponseItem, UnknownResponseItem,
9};
10
11pub type CompactResponseWireModel =
12 OpenAiWireModel<CompactResponseRequestBody, CompactedResponseObject>;
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
15#[non_exhaustive]
16pub struct CompactResponseRequestBody {
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub input: Option<ResponseInput>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub instructions: Option<String>,
21 pub model: OpenAiModelId,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub previous_response_id: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub prompt_cache_key: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub prompt_cache_options: Option<PromptCacheOptions>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub prompt_cache_retention: Option<PromptCacheRetention>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub service_tier: Option<CompactServiceTier>,
32 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
33 pub extra: Extra,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[non_exhaustive]
38pub struct CompactedResponseObject {
39 pub id: String,
40 pub created_at: u64,
41 pub object: ResponseCompactionObjectType,
42 pub output: Vec<CompactResponseItem>,
43 pub usage: ResponseUsage,
44 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
45 pub extra: Extra,
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49#[serde(untagged)]
50#[non_exhaustive]
51pub enum CompactResponseItem {
52 Message(CompactMessageItem),
53 Typed(TypedResponseItem),
54 Unknown(UnknownResponseItem),
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
58#[non_exhaustive]
59pub struct CompactMessageItem {
60 pub id: String,
61 #[serde(rename = "type")]
62 pub type_: ResponseMessageItemType,
63 pub content: Vec<CompactMessageContentPart>,
64 pub role: CompactMessageRole,
65 pub status: ResponseItemLifecycleStatus,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub phase: Option<ResponsePhase>,
68 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
69 pub extra: Extra,
70}
71
72#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
73#[serde(untagged)]
74#[non_exhaustive]
75pub enum CompactMessageContentPart {
76 Input(ResponseInputContentPart),
77 Output(ResponseOutputContentPart),
78 Text(CompactTextContent),
79 SummaryText(CompactSummaryTextContent),
80 ComputerScreenshot(ComputerScreenshot),
81}
82
83#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
84#[non_exhaustive]
85pub struct CompactTextContent {
86 pub text: String,
87 #[serde(rename = "type")]
88 pub type_: CompactTextContentType,
89 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
90 pub extra: Extra,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94#[non_exhaustive]
95pub enum CompactTextContentType {
96 #[serde(rename = "text")]
97 Text,
98}
99
100#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
101#[non_exhaustive]
102pub struct CompactSummaryTextContent {
103 pub text: String,
104 #[serde(rename = "type")]
105 pub type_: CompactSummaryTextContentType,
106 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
107 pub extra: Extra,
108}
109
110#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
111#[non_exhaustive]
112pub enum CompactSummaryTextContentType {
113 #[serde(rename = "summary_text")]
114 SummaryText,
115}
116
117#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
118#[non_exhaustive]
119pub enum CompactMessageRole {
120 #[serde(rename = "unknown")]
121 Unknown,
122 #[serde(rename = "user")]
123 User,
124 #[serde(rename = "assistant")]
125 Assistant,
126 #[serde(rename = "system")]
127 System,
128 #[serde(rename = "critic")]
129 Critic,
130 #[serde(rename = "discriminator")]
131 Discriminator,
132 #[serde(rename = "developer")]
133 Developer,
134 #[serde(rename = "tool")]
135 Tool,
136}
137
138#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
139#[non_exhaustive]
140pub enum CompactServiceTier {
141 #[serde(rename = "auto")]
142 Auto,
143 #[serde(rename = "default")]
144 Default,
145 #[serde(rename = "fast")]
146 Fast,
147 #[serde(rename = "flex")]
148 Flex,
149 #[serde(rename = "priority")]
150 Priority,
151}