daemon: verbose pool logging, DAEMON_POOL for run_job
Store resource pool in OnceLock so run_job can pass it to Daemon::run_job for pool state logging. Verbose logging enabled via POC_MEMORY_VERBOSE=1 env var. LLM backend selection and spawn-site pool state now use verbose log level to keep daemon.log clean in production. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
49f72cdac3
commit
0944ecc43f
2 changed files with 21 additions and 5 deletions
|
|
@ -37,11 +37,19 @@ pub fn log_event_pub(job: &str, event: &str, detail: &str) {
|
||||||
log_event(job, event, detail);
|
log_event(job, event, detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Verbose log — only written if verbose logging is enabled.
|
||||||
|
pub fn log_verbose(job: &str, event: &str, detail: &str) {
|
||||||
|
jobkit::daemon::event_log::verbose(&crate::config::get().data_dir, job, event, detail);
|
||||||
|
}
|
||||||
|
|
||||||
// --- Job functions (direct, no subprocess) ---
|
// --- Job functions (direct, no subprocess) ---
|
||||||
|
|
||||||
|
static DAEMON_POOL: std::sync::OnceLock<Arc<jobkit::ResourcePool>> = std::sync::OnceLock::new();
|
||||||
|
|
||||||
/// Run a named job with logging, progress reporting, and error mapping.
|
/// Run a named job with logging, progress reporting, and error mapping.
|
||||||
fn run_job(ctx: &ExecutionContext, name: &str, f: impl FnOnce() -> Result<(), String>) -> Result<(), TaskError> {
|
fn run_job(ctx: &ExecutionContext, name: &str, f: impl FnOnce() -> Result<(), String>) -> Result<(), TaskError> {
|
||||||
jobkit::daemon::Daemon::run_job(&crate::config::get().data_dir, ctx, name, f)
|
let pool = DAEMON_POOL.get().map(|p| p.as_ref());
|
||||||
|
jobkit::daemon::Daemon::run_job(&crate::config::get().data_dir, ctx, name, pool, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
// experience_mine and fact_mine removed — observation.agent handles all transcript mining
|
// experience_mine and fact_mine removed — observation.agent handles all transcript mining
|
||||||
|
|
@ -635,9 +643,15 @@ pub fn run_daemon() -> Result<(), String> {
|
||||||
|
|
||||||
let choir = Arc::clone(&daemon.choir);
|
let choir = Arc::clone(&daemon.choir);
|
||||||
let llm = Arc::clone(&daemon.resource);
|
let llm = Arc::clone(&daemon.resource);
|
||||||
|
let _ = DAEMON_POOL.set(Arc::clone(&llm));
|
||||||
let task_log_dir = config.data_dir.join("logs");
|
let task_log_dir = config.data_dir.join("logs");
|
||||||
let _ = fs::create_dir_all(&task_log_dir);
|
let _ = fs::create_dir_all(&task_log_dir);
|
||||||
|
|
||||||
|
// Enable verbose logging if POC_MEMORY_VERBOSE is set
|
||||||
|
if std::env::var("POC_MEMORY_VERBOSE").is_ok() {
|
||||||
|
jobkit::daemon::event_log::set_level(jobkit::daemon::event_log::LogLevel::Verbose);
|
||||||
|
}
|
||||||
|
|
||||||
// Recover last_daily from previous status file
|
// Recover last_daily from previous status file
|
||||||
let last_daily: Arc<Mutex<Option<chrono::NaiveDate>>> = Arc::new(Mutex::new(
|
let last_daily: Arc<Mutex<Option<chrono::NaiveDate>>> = Arc::new(Mutex::new(
|
||||||
jobkit::daemon::status::load::<DaemonStatus>(&config.data_dir)
|
jobkit::daemon::status::load::<DaemonStatus>(&config.data_dir)
|
||||||
|
|
@ -1107,8 +1121,10 @@ pub fn run_daemon() -> Result<(), String> {
|
||||||
let agent = agent_type.to_string();
|
let agent = agent_type.to_string();
|
||||||
let key = key.clone();
|
let key = key.clone();
|
||||||
let task_name = format!("c-{}-{}:{}", agent, key.chars().take(30).collect::<String>(), today);
|
let task_name = format!("c-{}-{}:{}", agent, key.chars().take(30).collect::<String>(), today);
|
||||||
log_event("daemon", "spawn-targeted",
|
if jobkit::daemon::event_log::enabled(jobkit::daemon::event_log::LogLevel::Verbose) {
|
||||||
&format!("{} (available slots: {})", task_name, llm_rpc.available()));
|
log_event("daemon", "spawn-targeted",
|
||||||
|
&format!("{} (pool: {}/{})", task_name, llm_rpc.available(), llm_rpc.capacity()));
|
||||||
|
}
|
||||||
choir_rpc.spawn(task_name)
|
choir_rpc.spawn(task_name)
|
||||||
.resource(&llm_rpc)
|
.resource(&llm_rpc)
|
||||||
.log_dir(&log_dir_rpc)
|
.log_dir(&log_dir_rpc)
|
||||||
|
|
|
||||||
|
|
@ -189,12 +189,12 @@ pub(crate) fn call_haiku(agent: &str, prompt: &str) -> Result<String, String> {
|
||||||
pub(crate) fn call_for_def(def: &super::defs::AgentDef, prompt: &str) -> Result<String, String> {
|
pub(crate) fn call_for_def(def: &super::defs::AgentDef, prompt: &str) -> Result<String, String> {
|
||||||
let config = crate::config::get();
|
let config = crate::config::get();
|
||||||
if config.api_base_url.is_some() && !def.tools.is_empty() {
|
if config.api_base_url.is_some() && !def.tools.is_empty() {
|
||||||
super::daemon::log_event_pub(&def.agent, "llm-backend",
|
super::daemon::log_verbose(&def.agent, "llm-backend",
|
||||||
&format!("API: {}", config.api_base_url.as_deref().unwrap_or("?")));
|
&format!("API: {}", config.api_base_url.as_deref().unwrap_or("?")));
|
||||||
let log = |msg: &str| eprintln!("[{}] {}", def.agent, msg);
|
let log = |msg: &str| eprintln!("[{}] {}", def.agent, msg);
|
||||||
super::api::call_api_with_tools_sync(&def.agent, prompt, &log)
|
super::api::call_api_with_tools_sync(&def.agent, prompt, &log)
|
||||||
} else {
|
} else {
|
||||||
super::daemon::log_event_pub(&def.agent, "llm-backend",
|
super::daemon::log_verbose(&def.agent, "llm-backend",
|
||||||
&format!("claude -p (model={}, tools={})", def.model, def.tools.len()));
|
&format!("claude -p (model={}, tools={})", def.model, def.tools.len()));
|
||||||
call_model_with_tools(&def.agent, &def.model, prompt, &def.tools)
|
call_model_with_tools(&def.agent, &def.model, prompt, &def.tools)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue