From c773e8d2e1e737fdda2f7bfe8e97c0411a1ba172 Mon Sep 17 00:00:00 2001 From: sigoden Date: Sun, 25 Feb 2024 20:09:40 +0800 Subject: [PATCH] refactor: improve saving messages (#322) --- src/config/input.rs | 9 +++++++-- src/config/role.rs | 4 ++-- src/main.rs | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/config/input.rs b/src/config/input.rs index 6fa1b1cc..cb3cdf2a 100644 --- a/src/config/input.rs +++ b/src/config/input.rs @@ -80,7 +80,12 @@ impl Input { } pub fn summary(&self) -> String { - let text = &self.text; + let text: String = self + .text + .trim() + .chars() + .map(|c| if c.is_control() { ' ' } else { c }) + .collect(); if text.width_cjk() > 70 { let mut sum_width = 0; let mut chars = vec![]; @@ -94,7 +99,7 @@ impl Input { } chars.into_iter().collect() } else { - text.clone() + text } } diff --git a/src/config/role.rs b/src/config/role.rs index ff60b551..f963874d 100644 --- a/src/config/role.rs +++ b/src/config/role.rs @@ -29,7 +29,7 @@ impl Role { None => &shell, }; Self { - name: "__builtin__".into(), + name: "__for_execute__".into(), prompt: format!( r#"Provide only {shell} commands for {os} without any description. If there is a lack of details, provide most logical solution. @@ -44,7 +44,7 @@ Do not provide markdown formatting such as ```"# pub fn for_describe() -> Self { Self { - name: "__builtin__".into(), + name: "__for_describe__".into(), prompt: r#"Provide a terse, single sentence description of the given shell command. Describe each argument and option of the command. Provide short responses in about 80 words. diff --git a/src/main.rs b/src/main.rs index 6c3d54fa..bd319e13 100644 --- a/src/main.rs +++ b/src/main.rs @@ -145,6 +145,7 @@ fn execute(config: &GlobalConfig, text: &str) -> Result<()> { let client = init_client(config)?; config.read().maybe_print_send_tokens(&input); let eval_str = client.send_message(input.clone())?; + config.write().save_message(input, &eval_str)?; let render_options = config.read().get_render_options()?; let mut markdown_render = MarkdownRender::init(render_options)?; if config.read().dry_run {