Skip to main content

novel_openai/containers/
container_files.rs

1use bytes::Bytes;
2
3use crate::config::Config;
4use crate::error::OpenAIError;
5use crate::spec::containers::{
6    ContainerFileListResource, ContainerFileResource, CreateContainerFileRequest,
7    DeleteContainerFileResponse,
8};
9use crate::{Client, RequestOptions};
10
11/// Create and manage container files for use with the Code Interpreter tool.
12pub struct ContainerFiles<'c, C: Config> {
13    client: &'c Client<C>,
14    container_id: String,
15    pub(crate) request_options: RequestOptions,
16}
17
18impl<'c, C: Config> ContainerFiles<'c, C> {
19    pub fn new(client: &'c Client<C>, container_id: &str) -> Self {
20        Self {
21            client,
22            container_id: container_id.to_string(),
23            request_options: RequestOptions::new(),
24        }
25    }
26
27    /// Create a container file by uploading a raw file or by referencing an existing file ID.
28    #[crate::byot(
29        T0 = Clone,
30        R = serde::de::DeserializeOwned,
31        where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
32    )]
33    pub async fn create(
34        &self,
35        request: CreateContainerFileRequest,
36    ) -> Result<ContainerFileResource, OpenAIError> {
37        self.client
38            .post_form(
39                &format!("/containers/{}/files", self.container_id),
40                request,
41                &self.request_options,
42            )
43            .await
44    }
45
46    /// List container files.
47    #[crate::byot(R = serde::de::DeserializeOwned)]
48    pub async fn list(&self) -> Result<ContainerFileListResource, OpenAIError> {
49        self.client
50            .get(
51                &format!("/containers/{}/files", self.container_id),
52                &self.request_options,
53            )
54            .await
55    }
56
57    /// Retrieve a container file.
58    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
59    pub async fn retrieve(&self, file_id: &str) -> Result<ContainerFileResource, OpenAIError> {
60        self.client
61            .get(
62                format!("/containers/{}/files/{file_id}", self.container_id).as_str(),
63                &self.request_options,
64            )
65            .await
66    }
67
68    /// Delete a container file.
69    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
70    pub async fn delete(&self, file_id: &str) -> Result<DeleteContainerFileResponse, OpenAIError> {
71        self.client
72            .delete(
73                format!("/containers/{}/files/{file_id}", self.container_id).as_str(),
74                &self.request_options,
75            )
76            .await
77    }
78
79    /// Returns the content of a container file.
80    pub async fn content(&self, file_id: &str) -> Result<Bytes, OpenAIError> {
81        let (bytes, _headers) = self
82            .client
83            .get_raw(
84                format!("/containers/{}/files/{file_id}/content", self.container_id).as_str(),
85                &self.request_options,
86            )
87            .await?;
88        Ok(bytes)
89    }
90}