diff options
author | Oxbian <oxbian@mailbox.org> | 2025-03-09 16:44:26 -0400 |
---|---|---|
committer | Oxbian <oxbian@mailbox.org> | 2025-03-09 16:44:26 -0400 |
commit | b4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb (patch) | |
tree | 1262872c8bbec3fec90a19bf2d59ece652eb0bed | |
parent | 43f26405e818aec791b28c50373843851fe1320e (diff) | |
download | NAI-b4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb.tar.gz NAI-b4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb.zip |
feat: log + error handling
-rw-r--r-- | src/app/init.rs | 20 | ||||
-rw-r--r-- | src/app/llm.rs | 16 | ||||
-rw-r--r-- | src/ui/init.rs | 8 |
3 files changed, 27 insertions, 17 deletions
diff --git a/src/app/init.rs b/src/app/init.rs index f1f917a..dd8d3b7 100644 --- a/src/app/init.rs +++ b/src/app/init.rs @@ -12,7 +12,8 @@ pub struct App { impl App { pub fn new() -> App { - let chat_llm: LLM = LLM::new("config/chat-LLM.json".to_string()).unwrap(); + let chat_llm: LLM = LLM::new("config/chat-LLM.json".to_string()); + App { messages: vec![Message::new( MessageType::SYSTEM, @@ -20,13 +21,16 @@ impl App { )], conv_id: Uuid::new_v4(), chat_llm, - resume_llm: LLM::new("config/resume-LLM.json".to_string()).unwrap(), + resume_llm: LLM::new("config/resume-LLM.json".to_string()), } } fn append_message(&mut self, msg: String, role: MessageType) { let message = Message::new(role, msg); - message.save_message(self.conv_id.to_string()); + + let err = message.save_message(self.conv_id.to_string()); + warn(err.is_err().to_string()); + self.messages.push(message); } @@ -38,9 +42,13 @@ impl App { self.chat_llm.ask_format(&self.messages).await }); - let categorie = result.unwrap()[0]["function"]["arguments"]["category"].clone(); - - self.ask(categorie.to_string().as_str()); + match result { + Ok(msg) => { + let categorie = msg[0]["function"]["arguments"]["category"].clone(); + self.ask(categorie.to_string().as_str()); + }, + Err(e) => self.append_message(e.to_string(), MessageType::ASSISTANT), + } } fn ask(&mut self, mode: &str) { diff --git a/src/app/llm.rs b/src/app/llm.rs index a172855..9c6d222 100644 --- a/src/app/llm.rs +++ b/src/app/llm.rs @@ -15,11 +15,9 @@ pub struct LLM { } impl LLM { - pub fn new(config_file: String) -> Result<LLM, Box<dyn std::error::Error>> { - let contents = fs::read_to_string(config_file)?; - let llm: LLM = serde_json::from_str(&contents)?; - - Ok(llm) + pub fn new(config_file: String) -> LLM { + let contents = fs::read_to_string(config_file).unwrap(); + serde_json::from_str(&contents).unwrap() } pub async fn ask(&self, messages: &Vec<Message>) -> Result<String, Box<dyn std::error::Error>> { @@ -116,9 +114,9 @@ impl Message { Message { role, content } } - pub fn save_message(&self, conv_id: String) { + pub fn save_message(&self, conv_id: String) -> Result<(), Box<dyn std::error::Error>> { // Create conv directory if doesn't exist - create_dir_all("conv").unwrap(); + create_dir_all("conv")?; // Save message let mut file = OpenOptions::new() @@ -128,7 +126,9 @@ impl Message { .open("conv/".to_string() + &conv_id) .unwrap(); - writeln!(file, "{}", serde_json::to_string(self).unwrap()).unwrap(); + writeln!(file, "{}", serde_json::to_string(self)?)?; + + Ok(()) } } diff --git a/src/ui/init.rs b/src/ui/init.rs index eadaf36..5bea959 100644 --- a/src/ui/init.rs +++ b/src/ui/init.rs @@ -29,7 +29,7 @@ impl Ui { pub fn submit_message(&mut self) { if self.input_field.input_len() > 0 { self.input_field.input_mode = InputMode::Normal; - let _ = self.app.send_message(self.input_field.input.clone()); + self.app.send_message(self.input_field.input.clone()); self.input_field.input.clear(); self.input_field.reset_char_index(); } @@ -90,8 +90,8 @@ impl Ui { fn draw(&mut self, frame: &mut Frame) { let vertical = Layout::vertical([ Constraint::Length(1), - Constraint::Min(10), - Constraint::Length(5), + Constraint::Percentage(90), + Constraint::Percentage(10), ]); let [help_area, messages_area, input_area] = vertical.areas(frame.area()); @@ -123,6 +123,7 @@ impl Ui { let help_message = Paragraph::new(text); frame.render_widget(help_message, help_area); + // Rendering inputfield let input = Paragraph::new(self.input_field.input.as_str()) .style(match self.input_field.input_mode { InputMode::Normal => Style::default(), @@ -159,6 +160,7 @@ impl Ui { let scrollbar_input = Scrollbar::new(ScrollbarOrientation::VerticalRight); frame.render_stateful_widget(scrollbar_input, input_area, &mut scrollbar_state_input); + // Render message list let available_width_message = messages_area.width.saturating_sub(2); let mut messages = Vec::new(); let mut max_char_per_line = self.message_box_data.max_char_per_line; |