summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2023-10-28 21:39:17 +0800
committerGitHub <noreply@github.com>2023-10-28 21:39:17 +0800
commitbc44026ff8828f532e9eba138e2ba35f7c247271 (patch)
tree98c55ad31a543ff3cd56e297751d32ee9ca960a7 /src/main.rs
parent1575d441724a27854c8f9fe1510a47a3050ae28d (diff)
downloadaichat-bc44026ff8828f532e9eba138e2ba35f7c247271.tar.gz
feat: enhance session/conversation (#162)
* feat: enhance session/conversation * updates * updates * cut version v0.9.0-rc2 * add .session name completion
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main.rs b/src/main.rs
index 65bc5f2..d73d4c1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -42,9 +42,20 @@ fn main() -> Result<()> {
}
exit(0);
}
+ if cli.list_sessions {
+ let sessions = config.read().list_sessions()?.join("\n");
+ println!("{sessions}");
+ exit(0);
+ }
if cli.dry_run {
config.write().dry_run = true;
}
+ if let Some(session) = &cli.session {
+ config.write().start_session(session)?;
+ }
+ if let Some(model) = &cli.model {
+ config.write().set_model(model)?;
+ }
let role = match &cli.role {
Some(name) => Some(
config
@@ -54,9 +65,6 @@ fn main() -> Result<()> {
),
None => None,
};
- if let Some(model) = &cli.model {
- config.write().set_model(model)?;
- }
config.write().role = role;
if cli.no_highlight {
config.write().highlight = false;
@@ -65,7 +73,11 @@ fn main() -> Result<()> {
config.write().add_prompt(prompt)?;
}
if cli.info {
- let info = config.read().info()?;
+ let info = if let Some(session) = &config.read().session {
+ session.info()?
+ } else {
+ config.read().info()?
+ };
println!("{info}");
exit(0);
}
@@ -92,6 +104,9 @@ fn start_directive(
input: &str,
no_stream: bool,
) -> Result<()> {
+ if let Some(sesion) = &config.read().session {
+ sesion.guard_save()?;
+ }
if !stdout().is_terminal() {
config.write().highlight = false;
}
@@ -118,12 +133,11 @@ fn start_directive(
wg.wait();
output
};
- config.read().save_message(input, &output)
+ config.write().save_message(input, &output)
}
fn start_interactive(config: SharedConfig) -> Result<()> {
cl100k_base_singleton();
- config.write().on_repl()?;
- let mut repl = Repl::init(config.clone())?;
+ let mut repl: Repl = Repl::init(config.clone())?;
repl.run(config)
}