feat: 99% complete migration to new state structs to get away from God-Config struct; i.e. AppConfig, AppState, and RequestContext
This commit is contained in:
+38
-22
@@ -1,14 +1,13 @@
|
||||
use crate::config::{Config, GlobalConfig, RoleLike, ensure_parent_exists};
|
||||
use crate::config::paths;
|
||||
use crate::config::{Config, RequestContext, RoleLike, ensure_parent_exists};
|
||||
use crate::repl::{run_repl_command, split_args_text};
|
||||
use crate::utils::{AbortSignal, multiline_text};
|
||||
use anyhow::{Result, anyhow};
|
||||
use indexmap::IndexMap;
|
||||
use parking_lot::RwLock;
|
||||
use rust_embed::Embed;
|
||||
use serde::Deserialize;
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Embed)]
|
||||
#[folder = "assets/macros"]
|
||||
@@ -16,7 +15,7 @@ struct MacroAssets;
|
||||
|
||||
#[async_recursion::async_recursion]
|
||||
pub async fn macro_execute(
|
||||
config: &GlobalConfig,
|
||||
ctx: &mut RequestContext,
|
||||
name: &str,
|
||||
args: Option<&str>,
|
||||
abort_signal: AbortSignal,
|
||||
@@ -29,25 +28,42 @@ pub async fn macro_execute(
|
||||
let variables = macro_value
|
||||
.resolve_variables(&new_args)
|
||||
.map_err(|err| anyhow!("{err}. Usage: {}", macro_value.usage(name)))?;
|
||||
let role = config.read().extract_role();
|
||||
let mut config = config.read().clone();
|
||||
config.temperature = role.temperature();
|
||||
config.top_p = role.top_p();
|
||||
config.enabled_tools = role.enabled_tools().clone();
|
||||
config.enabled_mcp_servers = role.enabled_mcp_servers().clone();
|
||||
config.macro_flag = true;
|
||||
config.model = role.model().clone();
|
||||
config.role = None;
|
||||
config.session = None;
|
||||
config.rag = None;
|
||||
config.agent = None;
|
||||
config.discontinuous_last_message();
|
||||
let config = Arc::new(RwLock::new(config));
|
||||
config.write().macro_flag = true;
|
||||
let role = ctx.extract_role(ctx.app.config.as_ref());
|
||||
let mut app_config = (*ctx.app.config).clone();
|
||||
app_config.temperature = role.temperature();
|
||||
app_config.top_p = role.top_p();
|
||||
app_config.enabled_tools = role.enabled_tools().clone();
|
||||
app_config.enabled_mcp_servers = role.enabled_mcp_servers().clone();
|
||||
|
||||
let mut app_state = (*ctx.app).clone();
|
||||
app_state.config = std::sync::Arc::new(app_config);
|
||||
|
||||
let mut macro_ctx = RequestContext::new(std::sync::Arc::new(app_state), ctx.working_mode);
|
||||
macro_ctx.macro_flag = true;
|
||||
macro_ctx.info_flag = ctx.info_flag;
|
||||
macro_ctx.model = role.model().clone();
|
||||
macro_ctx.agent_variables = ctx.agent_variables.clone();
|
||||
macro_ctx.last_message = ctx.last_message.clone();
|
||||
macro_ctx.supervisor = ctx.supervisor.clone();
|
||||
macro_ctx.parent_supervisor = ctx.parent_supervisor.clone();
|
||||
macro_ctx.self_agent_id = ctx.self_agent_id.clone();
|
||||
macro_ctx.inbox = ctx.inbox.clone();
|
||||
macro_ctx.escalation_queue = ctx.escalation_queue.clone();
|
||||
macro_ctx.current_depth = ctx.current_depth;
|
||||
macro_ctx.auto_continue_count = ctx.auto_continue_count;
|
||||
macro_ctx.todo_list = ctx.todo_list.clone();
|
||||
macro_ctx.tool_scope.tool_tracker = ctx.tool_scope.tool_tracker.clone();
|
||||
macro_ctx.discontinuous_last_message();
|
||||
|
||||
let app = macro_ctx.app.config.clone();
|
||||
macro_ctx
|
||||
.bootstrap_tools(app.as_ref(), true, abort_signal.clone())
|
||||
.await?;
|
||||
|
||||
for step in ¯o_value.steps {
|
||||
let command = Macro::interpolate_command(step, &variables);
|
||||
println!(">> {}", multiline_text(&command));
|
||||
run_repl_command(&config, abort_signal.clone(), &command).await?;
|
||||
run_repl_command(&mut macro_ctx, abort_signal.clone(), &command).await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@@ -63,7 +79,7 @@ impl Macro {
|
||||
pub fn install_macros() -> Result<()> {
|
||||
info!(
|
||||
"Installing built-in macros in {}",
|
||||
Config::macros_dir().display()
|
||||
paths::macros_dir().display()
|
||||
);
|
||||
|
||||
for file in MacroAssets::iter() {
|
||||
@@ -71,7 +87,7 @@ impl Macro {
|
||||
let embedded_file = MacroAssets::get(&file)
|
||||
.ok_or_else(|| anyhow!("Failed to load embedded macro file: {}", file.as_ref()))?;
|
||||
let content = unsafe { std::str::from_utf8_unchecked(&embedded_file.data) };
|
||||
let file_path = Config::macros_dir().join(file.as_ref());
|
||||
let file_path = paths::macros_dir().join(file.as_ref());
|
||||
|
||||
if file_path.exists() {
|
||||
debug!(
|
||||
|
||||
Reference in New Issue
Block a user