langchain/openai_api/
files.rs

1use super::client::OpenAIRequest;
2use reqwest::Method;
3use serde::{Deserialize, Serialize, Serializer};
4use std::collections::HashMap;
5
6pub enum FilePayload<'a> {
7    FineTuning {
8        /// A string slice of the contents of the file
9        payload: &'a str,
10    },
11}
12
13impl<'a> Serialize for FilePayload<'a> {
14    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
15    where
16        S: Serializer,
17    {
18        #[derive(Serialize)]
19        struct Payload<'a> {
20            payload: &'a str,
21            purpose: &'static str,
22        }
23        match self {
24            FilePayload::FineTuning { payload } => Payload {
25                payload,
26                purpose: "fine-tuning",
27            }
28            .serialize(serializer),
29        }
30    }
31}
32
33impl<'a> OpenAIRequest for FilePayload<'a> {
34    type Response = FileObject;
35
36    fn method() -> Method {
37        Method::POST
38    }
39
40    fn url() -> &'static str {
41        todo!()
42    }
43}
44
45#[derive(Deserialize)]
46pub struct FileObject {
47    pub id: String,
48    pub object: String,
49    pub bytes: i64,
50    pub created_at: i64,
51    pub filename: String,
52    pub purpose: String,
53}
54
55#[cfg(test)]
56mod test {
57    #[test]
58    fn serialisation() {
59        use super::*;
60        let payload = FilePayload::FineTuning {
61            payload: "Hello world",
62        };
63        let json = serde_json::to_string(&payload).unwrap();
64        assert_eq!(json, r#"{"payload":"Hello world","purpose":"fine-tuning"}"#);
65    }
66}