Skip to main content

gproxy_protocol/protocol/openai/
compact.rs

1use 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}