aiclient_api/convert/
openai_types.rs1use 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}