From 568e9a06db7189a28f9346802356b3fd4bdf921b Mon Sep 17 00:00:00 2001 From: sigoden Date: Fri, 12 Apr 2024 06:12:08 +0800 Subject: refactor: hide sytem roles from repl tab-completion (#407) --- src/config/mod.rs | 7 ++++++- src/config/role.rs | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'src/config') diff --git a/src/config/mod.rs b/src/config/mod.rs index 6291d5c..454dde3 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -502,7 +502,12 @@ impl Config { pub fn repl_complete(&self, cmd: &str, args: &[&str]) -> Vec { let (values, filter) = if args.len() == 1 { let values = match cmd { - ".role" => self.roles.iter().map(|v| v.name.clone()).collect(), + ".role" => self + .roles + .iter() + .filter(|v| !v.is_system()) + .map(|v| v.name.clone()) + .collect(), ".model" => list_models(self).into_iter().map(|v| v.id()).collect(), ".session" => self.list_sessions(), ".set" => vec![ diff --git a/src/config/role.rs b/src/config/role.rs index 57da38c..9042da3 100644 --- a/src/config/role.rs +++ b/src/config/role.rs @@ -46,8 +46,7 @@ impl Role { r#"Provide only {shell} commands for {os} without any description. Ensure the output is a valid {shell} command. {combine} If there is a lack of details, provide most logical solution. -Provide only plain text without Markdown formatting. -Do not provide markdown formatting such as ```"# +Output plain text only, without any markdown formatting."# ), temperature: None, } @@ -68,17 +67,20 @@ APPLY MARKDOWN formatting when possible."# pub fn for_code() -> Self { Self { name: Self::CODE.into(), - prompt: r#"Provide only code as output without any description. -Provide only code in plain text format without Markdown formatting. -Do not include symbols such as ``` or ```python. -If there is a lack of details, provide most logical solution. -You are not allowed to ask for more details. -For example if the prompt is "Hello world Python", you should return "print('Hello world')"."# + prompt: r#"Provide only code, without comments or explanations. +If there is a lack of details, provide most logical solution, without requesting further clarification."# .into(), temperature: None, } } + pub fn is_system(&self) -> bool { + matches!( + self.name.as_str(), + Self::EXECUTE | Self::DESCRIBE_COMMAND | Self::CODE + ) + } + pub fn export(&self) -> Result { let output = serde_yaml::to_string(&self) .with_context(|| format!("Unable to show info about role {}", &self.name))?; -- cgit v1.2.3