async_openai/
container_files.rs

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