use std::path::Path;
use crate::{
client::ChatGPT,
types::{ChatMessage, CompletionResponse, Role},
};
pub struct Conversation {
client: ChatGPT,
pub history: Vec<ChatMessage>,
}
impl Conversation {
pub fn new(client: ChatGPT, first_message: String) -> Self {
Self {
client,
history: vec![ChatMessage {
role: Role::System,
content: first_message,
}],
}
}
pub fn new_with_history(client: ChatGPT, history: Vec<ChatMessage>) -> Self {
Self { client, history }
}
pub fn send_message<S: Into<String>>(
&mut self,
message: S,
) -> String {
self.history.push(ChatMessage {
role: Role::User,
content: message.into(),
});
let resp = self.client.send_history(&self.history);
self.history.push(ChatMessage {
role: Role::User,
content: resp.clone(),
});
resp
}
}