Skip to main content

aiclient_api/convert/
openai_types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
4pub struct OpenAIChatRequest {
5    pub model: String,
6    pub messages: Vec<OpenAIMessage>,
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub stream: Option<bool>,
9    #[serde(skip_serializing_if = "Option::is_none")]
10    pub temperature: Option<f64>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub max_tokens: Option<u32>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub tools: Option<Vec<serde_json::Value>>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub tool_choice: Option<serde_json::Value>,
17    #[serde(flatten)]
18    pub extra: Option<serde_json::Map<String, serde_json::Value>>,
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct OpenAIMessage {
23    pub role: String,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub content: Option<serde_json::Value>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub name: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub tool_calls: Option<Vec<OpenAIToolCall>>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub tool_call_id: Option<String>,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct OpenAIToolCall {
36    pub id: String,
37    #[serde(rename = "type")]
38    pub call_type: String,
39    pub function: OpenAIFunction,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct OpenAIFunction {
44    pub name: String,
45    pub arguments: String,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct OpenAIChatResponse {
50    pub id: String,
51    pub object: String,
52    pub created: i64,
53    pub model: String,
54    pub choices: Vec<OpenAIChoice>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub usage: Option<OpenAIUsage>,
57}
58
59#[derive(Debug, Clone, Serialize, Deserialize)]
60pub struct OpenAIChoice {
61    pub index: u32,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub message: Option<OpenAIMessage>,
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub delta: Option<OpenAIDelta>,
66    #[serde(skip_serializing_if = "Option::is_none")]
67    pub finish_reason: Option<String>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct OpenAIDelta {
72    #[serde(skip_serializing_if = "Option::is_none")]
73    pub role: Option<String>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub content: Option<String>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub tool_calls: Option<Vec<OpenAIToolCall>>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct OpenAIUsage {
82    pub prompt_tokens: u32,
83    pub completion_tokens: u32,
84    pub total_tokens: u32,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct OpenAIStreamChunk {
89    pub id: String,
90    pub object: String,
91    pub created: i64,
92    pub model: String,
93    pub choices: Vec<OpenAIChoice>,
94}