Skip to main content

gproxy_protocol/protocol/openai/common/
formats.rs

1use serde::{Deserialize, Serialize};
2
3use super::{Extra, JsonSchema};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
6#[serde(untagged)]
7pub enum ChatResponseFormat {
8    ChatJsonSchema(ChatJsonSchemaFormat),
9    Text(TextResponseFormat),
10    JsonObject(JsonObjectResponseFormat),
11}
12
13#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
14#[serde(untagged)]
15pub enum ResponseFormat {
16    JsonSchema(JsonSchemaResponseFormat),
17    Text(TextResponseFormat),
18    JsonObject(JsonObjectResponseFormat),
19}
20
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub struct TextResponseFormat {
23    #[serde(rename = "type")]
24    pub type_: TextResponseFormatType,
25    #[serde(
26        default,
27        flatten,
28        skip_serializing_if = "std::collections::BTreeMap::is_empty"
29    )]
30    pub extra: Extra,
31}
32
33#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
34pub enum TextResponseFormatType {
35    #[serde(rename = "text")]
36    Text,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40pub struct ChatJsonSchemaFormat {
41    #[serde(rename = "type")]
42    pub type_: JsonSchemaResponseFormatType,
43    pub json_schema: JsonSchemaFormat,
44    #[serde(
45        default,
46        flatten,
47        skip_serializing_if = "std::collections::BTreeMap::is_empty"
48    )]
49    pub extra: Extra,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct JsonSchemaResponseFormat {
54    #[serde(rename = "type")]
55    pub type_: JsonSchemaResponseFormatType,
56    pub name: String,
57    pub schema: JsonSchema,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub description: Option<String>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub strict: Option<bool>,
62    #[serde(
63        default,
64        flatten,
65        skip_serializing_if = "std::collections::BTreeMap::is_empty"
66    )]
67    pub extra: Extra,
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub enum JsonSchemaResponseFormatType {
72    #[serde(rename = "json_schema")]
73    JsonSchema,
74}
75
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77pub struct JsonObjectResponseFormat {
78    #[serde(rename = "type")]
79    pub type_: JsonObjectResponseFormatType,
80    #[serde(
81        default,
82        flatten,
83        skip_serializing_if = "std::collections::BTreeMap::is_empty"
84    )]
85    pub extra: Extra,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
89pub enum JsonObjectResponseFormatType {
90    #[serde(rename = "json_object")]
91    JsonObject,
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95pub struct JsonSchemaFormat {
96    pub name: String,
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub description: Option<String>,
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub schema: Option<JsonSchema>,
101    #[serde(skip_serializing_if = "Option::is_none")]
102    pub strict: Option<bool>,
103    #[serde(
104        default,
105        flatten,
106        skip_serializing_if = "std::collections::BTreeMap::is_empty"
107    )]
108    pub extra: Extra,
109}