feat: add `.prompt` repl command (#420)

pull/423/head
sigoden 2 months ago committed by GitHub
parent 8b806db857
commit 5d763fc10c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -301,6 +301,11 @@ impl Config {
Ok(path)
}
pub fn set_prompt(&mut self, prompt: &str) -> Result<()> {
let role = Role::temp(prompt);
self.set_role_obj(role)
}
pub fn set_role(&mut self, name: &str) -> Result<()> {
let role = self.retrieve_role(name)?;
self.set_role_obj(role)

@ -7,6 +7,7 @@ use crate::{
use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
pub const TEMP_ROLE: &str = "%%";
pub const SHELL_ROLE: &str = "%shell%";
pub const EXPLAIN_ROLE: &str = "%explain%";
pub const CODE_ROLE: &str = "%code%";
@ -24,6 +25,14 @@ pub struct Role {
}
impl Role {
pub fn temp(prompt: &str) -> Self {
Self {
name: TEMP_ROLE.into(),
prompt: prompt.into(),
temperature: None,
}
}
pub fn find_system_role(name: &str) -> Option<Self> {
match name {
SHELL_ROLE => Some(Self::shell()),

@ -25,10 +25,15 @@ use std::{env, process};
const MENU_NAME: &str = "completion_menu";
lazy_static! {
static ref REPL_COMMANDS: [ReplCommand; 15] = [
static ref REPL_COMMANDS: [ReplCommand; 16] = [
ReplCommand::new(".help", "Print this help message", State::all()),
ReplCommand::new(".info", "Print system info", State::all()),
ReplCommand::new(".model", "Switch LLM model", State::all()),
ReplCommand::new(
".prompt",
"Use a temp role with this prompt",
State::able_change_role()
),
ReplCommand::new(".role", "Use a role", State::able_change_role()),
ReplCommand::new(".info role", "Show the role info", State::in_role(),),
ReplCommand::new(".exit role", "Leave current role", State::in_role(),),
@ -169,6 +174,12 @@ impl Repl {
}
None => println!("Usage: .model <name>"),
},
".prompt" => match args {
Some(text) => {
self.config.write().set_prompt(text)?;
}
None => println!("Usage: .prompt <text>..."),
},
".role" => match args {
Some(args) => match args.split_once(|c| c == '\n' || c == ' ') {
Some((name, text)) => {
@ -181,7 +192,7 @@ impl Repl {
self.config.write().set_role(args)?;
}
},
None => println!(r#"Usage: .role <name> [text...]"#),
None => println!(r#"Usage: .role <name> [text]..."#),
},
".session" => {
self.config.write().start_session(args)?;

Loading…
Cancel
Save