aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxbian <oxbian@mailbox.org>2025-03-09 16:44:26 -0400
committerOxbian <oxbian@mailbox.org>2025-03-09 16:44:26 -0400
commitb4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb (patch)
tree1262872c8bbec3fec90a19bf2d59ece652eb0bed
parent43f26405e818aec791b28c50373843851fe1320e (diff)
downloadNAI-b4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb.tar.gz
NAI-b4dd7d51ee2e30c4445e628056b5cbf93d9d8cbb.zip
feat: log + error handling
-rw-r--r--src/app/init.rs20
-rw-r--r--src/app/llm.rs16
-rw-r--r--src/ui/init.rs8
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;
ArKa projects. All rights to me, and your next child right arm.