Skip to content

Commit

Permalink
feat: add .prompt repl command (#420)
Browse files Browse the repository at this point in the history
  • Loading branch information
sigoden authored Apr 20, 2024
1 parent 8b806db commit 5d763fc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
5 changes: 5 additions & 0 deletions src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
9 changes: 9 additions & 0 deletions src/config/role.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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%";
Expand All @@ -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()),
Expand Down
15 changes: 13 additions & 2 deletions src/repl/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(),),
Expand Down Expand Up @@ -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)) => {
Expand All @@ -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)?;
Expand Down

0 comments on commit 5d763fc

Please sign in to comment.