summaryrefslogtreecommitdiffstats
path: root/src/config
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-12-01 11:35:12 +0800
committerGitHub <noreply@github.com>2024-12-01 11:35:12 +0800
commit6b6413b02df588faf6557053751b7e9c591539f7 (patch)
tree4f76e1a0eae6a4f762b24bae559167f8883bdf77 /src/config
parent7e8e2a6ce6d96ffa31c202ead6f31f18dc73c618 (diff)
downloadaichat-6b6413b02df588faf6557053751b7e9c591539f7.tar.gz
feat: add cli option `--agent-variable <name> <value>` (#1027)
Diffstat (limited to 'src/config')
-rw-r--r--src/config/agent.rs16
-rw-r--r--src/config/mod.rs36
2 files changed, 33 insertions, 19 deletions
diff --git a/src/config/agent.rs b/src/config/agent.rs
index 87ac719..5e54b26 100644
--- a/src/config/agent.rs
+++ b/src/config/agent.rs
@@ -15,24 +15,17 @@ const DEFAULT_AGENT_NAME: &str = "rag";
pub type AgentVariables = IndexMap<String, String>;
-#[derive(Debug, Clone, Serialize)]
+#[derive(Debug, Clone)]
pub struct Agent {
name: String,
config: AgentConfig,
definition: AgentDefinition,
- #[serde(skip)]
shared_variables: AgentVariables,
- #[serde(skip)]
session_variables: Option<AgentVariables>,
- #[serde(skip)]
shared_dynamic_instructions: Option<String>,
- #[serde(skip)]
session_dynamic_instructions: Option<String>,
- #[serde(skip)]
functions: Functions,
- #[serde(skip)]
rag: Option<Arc<Rag>>,
- #[serde(skip)]
model: Model,
}
@@ -75,7 +68,7 @@ impl Agent {
let rag = if rag_path.exists() {
Some(Arc::new(Rag::load(config, DEFAULT_AGENT_NAME, &rag_path)?))
- } else if !definition.documents.is_empty() && !config.read().print_info_only {
+ } else if !definition.documents.is_empty() && !config.read().cli_info_flag {
let mut ans = false;
if *IS_STDOUT_TERMINAL {
ans = Confirm::new("The agent has the documents, init RAG?")
@@ -182,11 +175,14 @@ impl Agent {
pub fn export(&self) -> Result<String> {
let mut agent = self.clone();
agent.definition.instructions = self.interpolated_instructions();
- let mut value = serde_json::json!(agent);
+ let mut value = json!({});
+ value["name"] = json!(self.name());
let variables = self.variables();
if !variables.is_empty() {
value["variables"] = serde_json::to_value(variables)?;
}
+ value["config"] = json!(self.config);
+ value["definition"] = json!(self.definition);
value["functions_dir"] = Config::agent_functions_dir(&self.name)
.display()
.to_string()
diff --git a/src/config/mod.rs b/src/config/mod.rs
index e0e1efa..c98c81d 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -156,9 +156,12 @@ pub struct Config {
#[serde(skip)]
pub working_mode: WorkingMode,
#[serde(skip)]
- pub print_info_only: bool,
- #[serde(skip)]
pub last_message: Option<(Input, String)>,
+
+ #[serde(skip)]
+ pub cli_info_flag: bool,
+ #[serde(skip)]
+ pub cli_agent_variables: Option<AgentVariables>,
}
impl Default for Config {
@@ -218,8 +221,10 @@ impl Default for Config {
model: Default::default(),
functions: Default::default(),
working_mode: WorkingMode::Cmd,
- print_info_only: false,
last_message: None,
+
+ cli_info_flag: false,
+ cli_agent_variables: None,
}
}
}
@@ -1508,6 +1513,7 @@ impl Config {
if self.agent.take().is_some() {
self.rag.take();
self.last_message = None;
+ self.cli_agent_variables = None;
}
Ok(())
}
@@ -1997,14 +2003,20 @@ impl Config {
None => return Ok(()),
};
if !agent.defined_variables().is_empty() && agent.shared_variables().is_empty() {
+ let mut config_variables = agent.config_variables().clone();
+ if let Some(v) = &self.cli_agent_variables {
+ config_variables.extend(v.clone());
+ }
let new_variables = Agent::init_agent_variables(
agent.defined_variables(),
- agent.config_variables(),
- self.print_info_only,
+ &config_variables,
+ self.cli_info_flag,
)?;
agent.set_shared_variables(new_variables);
}
- agent.update_shared_dynamic_instructions(false)?;
+ if !self.cli_info_flag {
+ agent.update_shared_dynamic_instructions(false)?;
+ }
Ok(())
}
@@ -2017,10 +2029,14 @@ impl Config {
let shared_variables = agent.shared_variables().clone();
let session_variables =
if !agent.defined_variables().is_empty() && shared_variables.is_empty() {
+ let mut config_variables = agent.config_variables().clone();
+ if let Some(v) = &self.cli_agent_variables {
+ config_variables.extend(v.clone());
+ }
let new_variables = Agent::init_agent_variables(
agent.defined_variables(),
- agent.config_variables(),
- self.print_info_only,
+ &config_variables,
+ self.cli_info_flag,
)?;
agent.set_shared_variables(new_variables.clone());
new_variables
@@ -2028,7 +2044,9 @@ impl Config {
shared_variables
};
agent.set_session_variables(session_variables);
- agent.update_session_dynamic_instructions(None)?;
+ if !self.cli_info_flag {
+ agent.update_session_dynamic_instructions(None)?;
+ }
session.sync_agent(agent);
} else {
let variables = session.agent_variables();