summaryrefslogtreecommitdiffstats
path: root/src/config/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-07-31 07:57:19 +0800
committerGitHub <noreply@github.com>2024-07-31 07:57:19 +0800
commit227cd5891f7b997a0936b3302aa636935d9d6ace (patch)
treefa4d22bc968cc8178ae1ed6e86353cf2e619323e /src/config/mod.rs
parent3ab489ebac3ebb1ac20ca56a4716785e203212e4 (diff)
downloadaichat-227cd5891f7b997a0936b3302aa636935d9d6ace.tar.gz
feat: add agent-scoped `agent_prelude` config (#770)
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r--src/config/mod.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index bd02ec3..7cd5a17 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -464,7 +464,7 @@ impl Config {
if role.top_p().is_none() && self.top_p.is_some() {
role.set_top_p(self.top_p);
}
- if role.use_tools().is_none() && self.use_tools.is_some() && self.agent.is_none() {
+ if role.use_tools().is_none() && self.use_tools.is_some() {
role.set_use_tools(self.use_tools.clone())
}
role
@@ -1028,11 +1028,15 @@ impl Config {
bail!("Already in a agent, please run '.exit agent' first to exit the current agent.");
}
let agent = Agent::init(config, name, abort_signal).await?;
+ let session = session.map(|v| v.to_string()).or_else(|| {
+ agent
+ .agent_prelude()
+ .map(|v| v.to_string())
+ .or_else(|| config.read().agent_prelude.clone())
+ .and_then(|v| if v.is_empty() { None } else { Some(v) })
+ });
config.write().rag = agent.rag();
config.write().agent = Some(agent);
- let session = session
- .map(|v| v.to_string())
- .or_else(|| config.read().agent_prelude.clone());
if let Some(session) = session {
config.write().use_session(Some(&session))?;
}
@@ -1085,7 +1089,12 @@ impl Config {
WorkingMode::Serve => return Ok(()),
};
let prelude = match prelude {
- Some(v) => v.to_string(),
+ Some(v) => {
+ if v.is_empty() {
+ return Ok(());
+ }
+ v.to_string()
+ }
None => return Ok(()),
};