summaryrefslogtreecommitdiffstats
path: root/src/config/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-04-14 14:43:42 +0800
committerGitHub <noreply@github.com>2024-04-14 14:43:42 +0800
commit6dc332930bf2e6d31c937d87e7ac7ae14c53b7c6 (patch)
treef944fc7a70e683930799dd77ca259ea6a610f813 /src/config/mod.rs
parent1c3e81afe9f63fb47303384a82c7239458166f52 (diff)
downloadaichat-6dc332930bf2e6d31c937d87e7ac7ae14c53b7c6.tar.gz
feat: make built-in roles selectable and rename them (#412)
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r--src/config/mod.rs30
1 files changed, 3 insertions, 27 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 454dde3..88235ac 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -4,6 +4,7 @@ mod session;
pub use self::input::{Input, InputContext};
use self::role::Role;
+pub use self::role::{CODE_ROLE, EXPLAIN_ROLE, SHELL_ROLE};
use self::session::{Session, TEMP_SESSION_NAME};
use crate::client::{
@@ -201,6 +202,7 @@ impl Config {
role.complete_prompt_args(name);
role
})
+ .or_else(|| Role::find_system_role(name))
.ok_or_else(|| anyhow!("Unknown role `{name}`"))
}
@@ -296,27 +298,6 @@ impl Config {
self.set_role_obj(role)
}
- pub fn set_execute_role(&mut self) -> Result<()> {
- let role = self
- .retrieve_role(Role::EXECUTE)
- .unwrap_or_else(|_| Role::for_execute());
- self.set_role_obj(role)
- }
-
- pub fn set_describe_command_role(&mut self) -> Result<()> {
- let role = self
- .retrieve_role(Role::DESCRIBE_COMMAND)
- .unwrap_or_else(|_| Role::for_describe_command());
- self.set_role_obj(role)
- }
-
- pub fn set_code_role(&mut self) -> Result<()> {
- let role = self
- .retrieve_role(Role::CODE)
- .unwrap_or_else(|_| Role::for_code());
- self.set_role_obj(role)
- }
-
pub fn set_role_obj(&mut self, role: Role) -> Result<()> {
if let Some(session) = self.session.as_mut() {
session.guard_empty()?;
@@ -502,12 +483,7 @@ impl Config {
pub fn repl_complete(&self, cmd: &str, args: &[&str]) -> Vec<String> {
let (values, filter) = if args.len() == 1 {
let values = match cmd {
- ".role" => self
- .roles
- .iter()
- .filter(|v| !v.is_system())
- .map(|v| v.name.clone())
- .collect(),
+ ".role" => self.roles.iter().map(|v| v.name.clone()).collect(),
".model" => list_models(self).into_iter().map(|v| v.id()).collect(),
".session" => self.list_sessions(),
".set" => vec![