async_openai/
conversation_items.rs1use 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
13pub 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 #[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 #[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 #[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 #[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}