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