async_openai/
conversation_items.rs

1use serde::Serialize;
2
3use crate::{
4    config::Config,
5    error::OpenAIError,
6    types::responses::{
7        ConversationItem, ConversationItemList, ConversationResource,
8        CreateConversationItemsRequest,
9    },
10    Client,
11};
12
13/// Conversation items represent items within a conversation.
14pub struct ConversationItems<'c, C: Config> {
15    client: &'c Client<C>,
16    pub conversation_id: String,
17}
18
19impl<'c, C: Config> ConversationItems<'c, C> {
20    pub fn new(client: &'c Client<C>, conversation_id: &str) -> Self {
21        Self {
22            client,
23            conversation_id: conversation_id.into(),
24        }
25    }
26
27    /// Create items in a conversation.
28    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
29    pub async fn create(
30        &self,
31        request: CreateConversationItemsRequest,
32    ) -> Result<ConversationItemList, OpenAIError> {
33        self.client
34            .post(
35                &format!("/conversations/{}/items", &self.conversation_id),
36                request,
37            )
38            .await
39    }
40
41    /// List all items for a conversation.
42    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
43    pub async fn list<Q>(&self, query: &Q) -> Result<ConversationItemList, OpenAIError>
44    where
45        Q: Serialize + ?Sized,
46    {
47        self.client
48            .get_with_query(
49                &format!("/conversations/{}/items", &self.conversation_id),
50                &query,
51            )
52            .await
53    }
54
55    /// Retrieve an item from a conversation.
56    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
57    pub async fn retrieve(&self, item_id: &str) -> Result<ConversationItem, OpenAIError> {
58        self.client
59            .get(&format!(
60                "/conversations/{}/items/{item_id}",
61                &self.conversation_id
62            ))
63            .await
64    }
65
66    /// Delete an item from a conversation.
67    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
68    pub async fn delete(&self, item_id: &str) -> Result<ConversationResource, OpenAIError> {
69        self.client
70            .delete(&format!(
71                "/conversations/{}/items/{item_id}",
72                &self.conversation_id
73            ))
74            .await
75    }
76}