summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-07-28 08:56:00 +0800
committerGitHub <noreply@github.com>2024-07-28 08:56:00 +0800
commit49b61129c95a3528eaf25dabcb55825b5ed7be72 (patch)
tree18f4e8b46c8f5ca8093f1684a4c1dfa7d9f92a51 /src/config
parent3441630c6223ebbab55d62c969390edf865d3d34 (diff)
downloadaichat-49b61129c95a3528eaf25dabcb55825b5ed7be72.tar.gz
feat: add `config.stream` and `.set stream` repl command (#759)
Diffstat (limited to 'src/config')
-rw-r--r--src/config/mod.rs56
1 files changed, 38 insertions, 18 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 6d196d6..9ebf34b 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -89,6 +89,7 @@ pub struct Config {
pub top_p: Option<f64>,
pub dry_run: bool,
+ pub stream: bool,
pub save: bool,
pub keybindings: String,
pub buffer_editor: Option<String>,
@@ -156,6 +157,7 @@ impl Default for Config {
top_p: None,
dry_run: false,
+ stream: true,
save: false,
keybindings: "emacs".into(),
buffer_editor: None,
@@ -516,6 +518,7 @@ impl Config {
("temperature", format_option_value(&role.temperature())),
("top_p", format_option_value(&role.top_p())),
("dry_run", self.dry_run.to_string()),
+ ("stream", self.stream.to_string()),
("save", self.save.to_string()),
("keybindings", self.keybindings.clone()),
("wrap", wrap),
@@ -570,6 +573,18 @@ impl Config {
let value = parse_value(value)?;
self.set_top_p(value);
}
+ "dry_run" => {
+ let value = value.parse().with_context(|| "Invalid value")?;
+ self.dry_run = value;
+ }
+ "stream" => {
+ let value = value.parse().with_context(|| "Invalid value")?;
+ self.stream = value;
+ }
+ "save" => {
+ let value = value.parse().with_context(|| "Invalid value")?;
+ self.save = value;
+ }
"rag_reranker_model" => {
self.rag_reranker_model = if value == "null" {
None
@@ -593,26 +608,18 @@ impl Config {
let value = parse_value(value)?;
self.set_use_tools(value);
}
- "compress_threshold" => {
- let value = parse_value(value)?;
- self.set_compress_threshold(value);
- }
- "save" => {
- let value = value.parse().with_context(|| "Invalid value")?;
- self.save = value;
- }
"save_session" => {
let value = parse_value(value)?;
self.set_save_session(value);
}
+ "compress_threshold" => {
+ let value = parse_value(value)?;
+ self.set_compress_threshold(value);
+ }
"highlight" => {
let value = value.parse().with_context(|| "Invalid value")?;
self.highlight = value;
}
- "dry_run" => {
- let value = value.parse().with_context(|| "Invalid value")?;
- self.dry_run = value;
- }
_ => bail!("Unknown key `{key}`"),
}
Ok(())
@@ -1229,6 +1236,7 @@ impl Config {
"temperature",
"top_p",
"dry_run",
+ "stream",
"save",
"save_session",
"compress_threshold",
@@ -1251,6 +1259,7 @@ impl Config {
None => vec![],
},
"dry_run" => complete_bool(self.dry_run),
+ "stream" => complete_bool(self.stream),
"save" => complete_bool(self.save),
"save_session" => {
let save_session = if let Some(session) = &self.session {
@@ -1338,12 +1347,6 @@ impl Config {
Ok(RenderOptions::new(theme, wrap, self.wrap_code, truecolor))
}
- pub fn markdown_render(&self, text: &str) -> Result<String> {
- let render_options = self.render_options()?;
- let mut markdown_render = MarkdownRender::init(render_options)?;
- Ok(markdown_render.render(text))
- }
-
pub fn render_prompt_left(&self) -> String {
let variables = self.generate_prompt_context();
let left_prompt = self.left_prompt.as_deref().unwrap_or(LEFT_PROMPT);
@@ -1356,6 +1359,17 @@ impl Config {
render_prompt(right_prompt, &variables)
}
+ pub fn print_markdown(&self, text: &str) -> Result<()> {
+ if *IS_STDOUT_TERMINAL {
+ let render_options = self.render_options()?;
+ let mut markdown_render = MarkdownRender::init(render_options)?;
+ println!("{}", markdown_render.render(text));
+ } else {
+ println!("{text}");
+ }
+ Ok(())
+ }
+
fn generate_prompt_context(&self) -> HashMap<&str, String> {
let mut output = HashMap::new();
let role = self.extract_role();
@@ -1382,6 +1396,9 @@ impl Config {
if self.dry_run {
output.insert("dry_run", "true".to_string());
}
+ if self.stream {
+ output.insert("stream", "true".to_string());
+ }
if self.save {
output.insert("save", "true".to_string());
}
@@ -1557,6 +1574,9 @@ impl Config {
if let Some(Some(v)) = read_env_bool("dry_run") {
self.dry_run = v;
}
+ if let Some(Some(v)) = read_env_bool("stream") {
+ self.stream = v;
+ }
if let Some(Some(v)) = read_env_bool("save") {
self.save = v;
}