auto_pilot/
types.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, PartialEq, Eq, Clone, Debug)]
4pub enum Role {
5    #[serde(rename = "user")]
6    User,
7    #[serde(rename = "assistant")]
8    Assistant,
9}
10
11#[derive(Serialize, Deserialize, Clone, Debug)]
12pub struct TextMessage {
13    pub role: Role,
14    pub content: String,
15}
16
17#[derive(Serialize, Deserialize, Clone, Debug)]
18#[serde(tag = "type")]
19pub enum ImageMessageContent {
20    #[serde(rename = "text")]
21    Text { text: String },
22    #[serde(rename = "image_url")]
23    ImageUrl { image_url: ImageUrl },
24}
25
26#[derive(Serialize, Deserialize, Clone, Debug)]
27pub struct ImageUrl {
28    pub url: String,
29}
30
31#[derive(Serialize, Deserialize, Clone, Debug)]
32pub struct ImageMessage {
33    pub role: Role,
34    pub content: Vec<ImageMessageContent>,
35}
36
37#[derive(Serialize, Deserialize, Debug)]
38pub struct OpenAIRequest {
39    pub model: String,
40    pub messages: Vec<Message>,
41    pub max_tokens: i32,
42}
43
44#[derive(Serialize, Deserialize, Clone, Debug)]
45#[serde(untagged)]
46pub enum Message {
47    TextMessage(TextMessage),
48    ImageMessage(ImageMessage),
49}