use crate::repl::conversation::ConversationHistory;
use crate::session::DisplayMessage;
#[derive(Clone)]
pub struct SessionState {
pub session_id: String,
pub conversation: ConversationHistory,
pub display_messages: Vec<DisplayMessage>,
pub total_input_tokens: u32,
pub total_output_tokens: u32,
pub total_cache_read_tokens: u32,
pub total_cache_creation_tokens: u32,
}
impl SessionState {
pub fn new(session_id: String, conversation: ConversationHistory) -> Self {
Self {
session_id,
conversation,
display_messages: Vec::new(),
total_input_tokens: 0,
total_output_tokens: 0,
total_cache_read_tokens: 0,
total_cache_creation_tokens: 0,
}
}
pub fn clear(&mut self, new_session_id: String) {
self.session_id = new_session_id;
self.conversation.clear();
self.display_messages.clear();
self.total_input_tokens = 0;
self.total_output_tokens = 0;
self.total_cache_read_tokens = 0;
self.total_cache_creation_tokens = 0;
}
pub fn add_usage(&mut self, usage: &crate::api::Usage) {
self.total_input_tokens += usage.input_tokens;
self.total_output_tokens += usage.output_tokens;
self.total_cache_read_tokens += usage.cache_read_input_tokens.unwrap_or(0);
self.total_cache_creation_tokens += usage.cache_creation_input_tokens.unwrap_or(0);
}
}