diff options
| author | sigoden <sigoden@gmail.com> | 2024-05-11 09:23:59 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-11 09:23:59 +0800 |
| commit | 1e8fc5d269985048d8d3023a615b94a8908571cf (patch) | |
| tree | e1e43a67bf1e7b5d878d2a7cac5d25a07cda8bdc /src/config/mod.rs | |
| parent | 058299e500af86adbc065eced542e108ae325458 (diff) | |
| download | aichat-1e8fc5d269985048d8d3023a615b94a8908571cf.tar.gz | |
refactor: list roles includeing builtin roles (#499)
Diffstat (limited to 'src/config/mod.rs')
| -rw-r--r-- | src/config/mod.rs | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index e166969..4a1867f 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -3,7 +3,7 @@ mod role; mod session; pub use self::input::{Input, InputContext}; -pub use self::role::{Role, CODE_ROLE, EXPLAIN_ROLE, SHELL_ROLE}; +pub use self::role::{Role, CODE_ROLE, EXPLAIN_SHELL_ROLE, SHELL_ROLE}; use self::session::{Session, TEMP_SESSION_NAME}; use crate::client::{ @@ -190,7 +190,6 @@ impl Config { role.complete_prompt_args(name); role }) - .or_else(|| Role::find_system_role(name)) .ok_or_else(|| anyhow!("Unknown role `{name}`")) } @@ -682,10 +681,6 @@ impl Config { Ok(()) } - pub fn has_session(&self) -> bool { - self.session.is_some() - } - pub fn clear_session_messages(&mut self) -> Result<()> { if let Some(session) = self.session.as_mut() { session.clear_messages(); @@ -818,7 +813,7 @@ impl Config { } pub fn input_context(&self) -> InputContext { - InputContext::new(self.role.clone(), self.has_session()) + InputContext::new(self.role.clone(), self.session.is_some()) } pub fn maybe_print_send_tokens(&self, input: &Input) { @@ -978,7 +973,15 @@ impl Config { .with_context(|| format!("Failed to load roles at {}", path.display()))?; let roles: Vec<Role> = serde_yaml::from_str(&content).with_context(|| "Invalid roles config")?; + + let exist_roles: HashSet<_> = roles.iter().map(|v| v.name.clone()).collect(); self.roles = roles; + let builtin_roles = Role::builtin(); + for role in builtin_roles { + if !exist_roles.contains(&role.name) { + self.roles.push(role); + } + } Ok(()) } |
