From 923def0ab224ff16f53a3203a104dd88a92c573a Mon Sep 17 00:00:00 2001 From: "Dhanji R. Prasanna" Date: Mon, 22 Dec 2025 16:27:35 +1100 Subject: [PATCH] Convert all INFO logs to DEBUG to reduce CLI noise Converted ~77 info! macro calls to debug! across the codebase to prevent log messages from interrupting the CLI experience during normal operation. Users can still see these logs by setting RUST_LOG=debug if needed. Affected crates: - g3-cli - g3-computer-control - g3-console - g3-core - g3-ensembles - g3-execution - g3-providers --- crates/g3-cli/src/lib.rs | 4 ++-- .../g3-computer-control/src/platform/macos.rs | 8 +++---- crates/g3-console/src/api/control.rs | 10 ++++---- crates/g3-console/src/api/state.rs | 4 ++-- crates/g3-console/src/launch.rs | 6 ++--- crates/g3-console/src/main.rs | 6 ++--- crates/g3-console/src/process/controller.rs | 12 +++++----- crates/g3-console/src/process/detector.rs | 6 ++--- crates/g3-core/src/error_handling.rs | 8 +++---- crates/g3-core/src/feedback_extraction.rs | 10 ++++---- crates/g3-core/src/lib.rs | 24 +++++++++---------- crates/g3-core/src/retry.rs | 6 ++--- crates/g3-core/src/session_continuation.rs | 8 +++---- crates/g3-ensembles/src/flock.rs | 6 ++--- crates/g3-execution/src/lib.rs | 20 ++++++++-------- crates/g3-providers/src/anthropic.rs | 2 +- crates/g3-providers/src/databricks.rs | 18 +++++++------- crates/g3-providers/src/embedded.rs | 24 +++++++++---------- crates/g3-providers/src/oauth.rs | 2 +- 19 files changed, 92 insertions(+), 92 deletions(-) diff --git a/crates/g3-cli/src/lib.rs b/crates/g3-cli/src/lib.rs index 1a89c62..76362ce 100644 --- a/crates/g3-cli/src/lib.rs +++ b/crates/g3-cli/src/lib.rs @@ -267,7 +267,7 @@ use std::path::Path; use std::path::PathBuf; use std::process::exit; use tokio_util::sync::CancellationToken; -use tracing::{error, info}; +use tracing::{debug, error}; use g3_core::error_handling::{classify_error, ErrorType, RecoverableError}; mod simple_output; @@ -2693,7 +2693,7 @@ Remember: Be clear in your review and concise in your feedback. APPROVE iff the extract_coach_feedback_from_logs(&coach_result, &coach_agent, &output)?; // Log the size of the feedback for debugging - info!( + debug!( "Coach feedback extracted: {} characters (from {} total)", coach_feedback_text.len(), coach_result.response.len() diff --git a/crates/g3-computer-control/src/platform/macos.rs b/crates/g3-computer-control/src/platform/macos.rs index dda2c0f..db64480 100644 --- a/crates/g3-computer-control/src/platform/macos.rs +++ b/crates/g3-computer-control/src/platform/macos.rs @@ -24,7 +24,7 @@ impl MacOSController { pub fn new() -> Result { let ocr = Box::new(DefaultOCR::new()?); let ocr_name = ocr.name().to_string(); - tracing::info!("Initialized macOS controller with OCR engine: {}", ocr_name); + tracing::debug!("Initialized macOS controller with OCR engine: {}", ocr_name); Ok(Self { ocr_engine: ocr, ocr_name, @@ -155,7 +155,7 @@ impl ComputerController for MacOSController { // 1. At layer 0 (normal windows, not menu bar) // 2. Have real bounds (width and height >= 100) if layer == 0 && has_real_bounds { - tracing::info!("Found valid window: ID {} for app '{}' (layer={}, bounds valid)", id, owner, layer); + tracing::debug!("Found valid window: ID {} for app '{}' (layer={}, bounds valid)", id, owner, layer); found_window_id = Some((id as u32, owner.clone())); break; } else { @@ -178,7 +178,7 @@ impl ComputerController for MacOSController { let (cg_window_id, matched_owner) = cg_window_id.ok_or_else(|| { anyhow::anyhow!("Could not find window for application '{}'. Use list_windows to see available windows.", app_name) })?; - tracing::info!( + tracing::debug!( "Taking screenshot of window ID {} for app '{}'", cg_window_id, matched_owner @@ -468,7 +468,7 @@ impl MacOSController { // Only accept windows with real bounds (>= 100x100 pixels) if w >= 100 && h >= 100 { - tracing::info!("Found valid window bounds for '{}': x={}, y={}, w={}, h={} (layer={})", owner, x, y, w, h, layer); + tracing::debug!("Found valid window bounds for '{}': x={}, y={}, w={}, h={} (layer={})", owner, x, y, w, h, layer); return Ok((x, y, w, h)); } else { tracing::debug!( diff --git a/crates/g3-console/src/api/control.rs b/crates/g3-console/src/api/control.rs index f5eb489..455849d 100644 --- a/crates/g3-console/src/api/control.rs +++ b/crates/g3-console/src/api/control.rs @@ -3,7 +3,7 @@ use crate::process::ProcessController; use axum::{extract::State, http::StatusCode, Json}; use std::sync::Arc; use tokio::sync::Mutex; -use tracing::{error, info}; +use tracing::{debug, error}; pub type ControllerState = Arc>; @@ -22,7 +22,7 @@ pub async fn kill_instance( match controller.kill_process(pid) { Ok(_) => { - info!("Successfully killed process {}", pid); + debug!("Successfully killed process {}", pid); Ok(Json(serde_json::json!({ "status": "terminating" }))) @@ -38,7 +38,7 @@ pub async fn restart_instance( State(controller): State, axum::extract::Path(id): axum::extract::Path, ) -> Result, StatusCode> { - info!("Restarting instance: {}", id); + debug!("Restarting instance: {}", id); // Extract PID from instance ID (format: pid_timestamp) let pid: u32 = id @@ -81,7 +81,7 @@ pub async fn launch_instance( State(controller): State, Json(request): Json, ) -> Result, (StatusCode, Json)> { - info!("Launching new g3 instance: {:?}", request); + debug!("Launching new g3 instance: {:?}", request); // Validate binary path if provided if let Some(ref binary_path) = request.g3_binary_path { @@ -149,7 +149,7 @@ pub async fn launch_instance( ) { Ok(pid) => { let id = format!("{}_{}", pid, chrono::Utc::now().timestamp()); - info!("Successfully launched g3 instance with PID {}", pid); + debug!("Successfully launched g3 instance with PID {}", pid); Ok(Json(LaunchResponse { id, status: "starting".to_string(), diff --git a/crates/g3-console/src/api/state.rs b/crates/g3-console/src/api/state.rs index fc31a19..2031a8a 100644 --- a/crates/g3-console/src/api/state.rs +++ b/crates/g3-console/src/api/state.rs @@ -3,7 +3,7 @@ use axum::{http::StatusCode, Json}; use serde::{Deserialize, Serialize}; use std::os::unix::fs::PermissionsExt; use std::path::PathBuf; -use tracing::{error, info}; +use tracing::{debug, error}; pub async fn get_state() -> Result, StatusCode> { let state = ConsoleState::load(); @@ -15,7 +15,7 @@ pub async fn save_state( ) -> Result, StatusCode> { match state.save() { Ok(_) => { - info!("Console state saved successfully"); + debug!("Console state saved successfully"); Ok(Json(serde_json::json!({ "status": "saved" }))) diff --git a/crates/g3-console/src/launch.rs b/crates/g3-console/src/launch.rs index cd46f4f..505d509 100644 --- a/crates/g3-console/src/launch.rs +++ b/crates/g3-console/src/launch.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; use std::fs; use std::path::PathBuf; -use tracing::info; +use tracing::debug; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct ConsoleState { @@ -42,7 +42,7 @@ impl ConsoleState { pub fn save(&self) -> anyhow::Result<()> { let config_path = Self::config_path(); - info!("Saving console state to: {:?}", config_path); + debug!("Saving console state to: {:?}", config_path); // Create parent directory if it doesn't exist if let Some(parent) = config_path.parent() { @@ -51,7 +51,7 @@ impl ConsoleState { let content = serde_json::to_string_pretty(self)?; fs::write(&config_path, content)?; - info!("Console state saved successfully to: {:?}", config_path); + debug!("Console state saved successfully to: {:?}", config_path); Ok(()) } diff --git a/crates/g3-console/src/main.rs b/crates/g3-console/src/main.rs index 182a316..50e7ee7 100644 --- a/crates/g3-console/src/main.rs +++ b/crates/g3-console/src/main.rs @@ -16,7 +16,7 @@ use std::sync::Arc; use tokio::sync::Mutex; use tower_http::cors::CorsLayer; use tower_http::services::ServeDir; -use tracing::{info, Level}; +use tracing::Level; use tracing_subscriber; #[derive(Parser, Debug)] @@ -84,12 +84,12 @@ async fn main() -> anyhow::Result<()> { .layer(CorsLayer::permissive()); let addr = format!("{}:{}", args.host, args.port); - info!("Starting g3-console on http://{}", addr); + debug!("Starting g3-console on http://{}", addr); // Auto-open browser if requested if args.open { let url = format!("http://{}", addr); - info!("Opening browser to {}", url); + debug!("Opening browser to {}", url); let _ = open::that(&url); } diff --git a/crates/g3-console/src/process/controller.rs b/crates/g3-console/src/process/controller.rs index 3a1f8f9..d6941c9 100644 --- a/crates/g3-console/src/process/controller.rs +++ b/crates/g3-console/src/process/controller.rs @@ -6,7 +6,7 @@ use std::path::PathBuf; use std::process::{Command, Stdio}; use std::sync::Mutex; use sysinfo::{Pid, Process, Signal, System}; -use tracing::{debug, info}; +use tracing::debug; pub struct ProcessController { system: System, @@ -26,7 +26,7 @@ impl ProcessController { self.system.refresh_processes(); if let Some(process) = self.system.process(sysinfo_pid) { - info!("Killing process {} ({})", pid, process.name()); + debug!("Killing process {} ({})", pid, process.name()); // Try SIGTERM first if process.kill_with(Signal::Term).is_some() { @@ -107,7 +107,7 @@ impl ProcessController { }); } - info!("Launching g3: {:?}", cmd); + debug!("Launching g3: {:?}", cmd); // Spawn and wait for the intermediate process to exit let mut child = cmd.spawn().context("Failed to spawn g3 process")?; @@ -120,7 +120,7 @@ impl ProcessController { // The actual g3 process is now running as orphan // We need to scan for it by matching workspace and recent start time - info!( + debug!( "Scanning for newly launched g3 process in workspace: {}", workspace ); @@ -171,7 +171,7 @@ impl ProcessController { found } else { // If we couldn't find it, try one more refresh after a longer delay - info!("Process not found on first scan, trying again..."); + debug!("Process not found on first scan, trying again..."); std::thread::sleep(std::time::Duration::from_millis(2000)); self.system.refresh_processes(); @@ -204,7 +204,7 @@ impl ProcessController { retry_found.unwrap_or(intermediate_pid) }; - info!("Launched g3 process with PID {}", pid); + debug!("Launched g3 process with PID {}", pid); // Store launch params for restart let params = LaunchParams { diff --git a/crates/g3-console/src/process/detector.rs b/crates/g3-console/src/process/detector.rs index 43b7b5c..97e545d 100644 --- a/crates/g3-console/src/process/detector.rs +++ b/crates/g3-console/src/process/detector.rs @@ -3,7 +3,7 @@ use anyhow::Result; use chrono::{DateTime, Utc}; use std::path::PathBuf; use sysinfo::{Pid, Process, System}; -use tracing::{debug, info, warn}; +use tracing::{debug, warn}; pub struct ProcessDetector { system: System, @@ -17,7 +17,7 @@ impl ProcessDetector { } pub fn detect_instances(&mut self) -> Result> { - info!("Scanning for g3 processes..."); + debug!("Scanning for g3 processes..."); // Refresh all processes to ensure we catch newly started ones // Using refresh_all() instead of just refresh_processes() to ensure // we get complete information about new processes @@ -37,7 +37,7 @@ impl ProcessDetector { } } - info!("Detected {} g3 instances", instances.len()); + debug!("Detected {} g3 instances", instances.len()); Ok(instances) } diff --git a/crates/g3-core/src/error_handling.rs b/crates/g3-core/src/error_handling.rs index 18d420e..9e582aa 100644 --- a/crates/g3-core/src/error_handling.rs +++ b/crates/g3-core/src/error_handling.rs @@ -9,7 +9,7 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; use std::time::Duration; -use tracing::{error, info, warn}; +use tracing::{debug, error, warn}; /// Base delay for exponential backoff (in milliseconds) const BASE_RETRY_DELAY_MS: u64 = 1000; @@ -149,7 +149,7 @@ impl ErrorContext { if let Err(e) = std::fs::write(&filename, json_content) { error!("Failed to save error context to {:?}: {}", &filename, e); } else { - info!("Error details saved to: {:?}", &filename); + debug!("Error details saved to: {:?}", &filename); } } Err(e) => { @@ -328,7 +328,7 @@ where match operation().await { Ok(result) => { if attempt > 1 { - info!( + debug!( "Operation '{}' succeeded after {} attempts", operation_name, attempt ); @@ -357,7 +357,7 @@ where // Special handling for token limit errors if matches!(recoverable_type, RecoverableError::TokenLimit) { - info!("Token limit error detected. Consider triggering summarization."); + debug!("Token limit error detected. Consider triggering summarization."); } tokio::time::sleep(delay).await; diff --git a/crates/g3-core/src/feedback_extraction.rs b/crates/g3-core/src/feedback_extraction.rs index 3666d97..12f121b 100644 --- a/crates/g3-core/src/feedback_extraction.rs +++ b/crates/g3-core/src/feedback_extraction.rs @@ -12,7 +12,7 @@ use crate::{logs_dir, Agent, TaskResult}; use crate::ui_writer::UiWriter; use serde_json::Value; use std::path::PathBuf; -use tracing::{debug, info, warn}; +use tracing::{debug, warn}; /// Result of feedback extraction with source information #[derive(Debug, Clone)] @@ -103,21 +103,21 @@ where // Try session log first (most reliable) if let Some(session_id) = agent.get_session_id() { if let Some(feedback) = try_extract_from_session_log(&session_id, config) { - info!("Extracted coach feedback from session log: {} chars", feedback.len()); + debug!("Extracted coach feedback from session log: {} chars", feedback.len()); return ExtractedFeedback::new(feedback, FeedbackSource::SessionLog); } } // Try native tool call JSON parsing if let Some(feedback) = try_extract_from_native_tool_call(&coach_result.response) { - info!("Extracted coach feedback from native tool call: {} chars", feedback.len()); + debug!("Extracted coach feedback from native tool call: {} chars", feedback.len()); return ExtractedFeedback::new(feedback, FeedbackSource::NativeToolCall); } // Try conversation history if let Some(session_id) = agent.get_session_id() { if let Some(feedback) = try_extract_from_conversation_history(&session_id, config) { - info!("Extracted coach feedback from conversation history: {} chars", feedback.len()); + debug!("Extracted coach feedback from conversation history: {} chars", feedback.len()); return ExtractedFeedback::new(feedback, FeedbackSource::ConversationHistory); } } @@ -125,7 +125,7 @@ where // Try TaskResult parsing let extracted = coach_result.extract_final_output(); if !extracted.is_empty() { - info!("Extracted coach feedback from task result: {} chars", extracted.len()); + debug!("Extracted coach feedback from task result: {} chars", extracted.len()); return ExtractedFeedback::new(extracted, FeedbackSource::TaskResultResponse); } diff --git a/crates/g3-core/src/lib.rs b/crates/g3-core/src/lib.rs index 05c39b7..2fb6d73 100644 --- a/crates/g3-core/src/lib.rs +++ b/crates/g3-core/src/lib.rs @@ -39,7 +39,7 @@ use serde_json::json; use std::io::Write; use std::time::{Duration, Instant}; use tokio_util::sync::CancellationToken; -use tracing::{debug, error, info, warn}; +use tracing::{debug, error, warn}; /// Get the path to the todo.g3.md file. /// @@ -2778,7 +2778,7 @@ impl Agent { /// Manually trigger context summarization regardless of context window size /// Returns Ok(true) if summarization was successful, Ok(false) if it failed pub async fn force_summarize(&mut self) -> Result { - info!("Manual summarization triggered"); + debug!("Manual summarization triggered"); self.ui_writer.print_context_status(&format!( "\nšŸ—œļø Manual summarization requested (current usage: {}%)...", @@ -2896,7 +2896,7 @@ impl Agent { /// Manually trigger context thinning regardless of thresholds pub fn force_thin(&mut self) -> String { - info!("Manual context thinning triggered"); + debug!("Manual context thinning triggered"); let (message, chars_saved) = self.context_window.thin_context(self.session_id.as_deref()); self.thinning_events.push(chars_saved); message @@ -2905,7 +2905,7 @@ impl Agent { /// Manually trigger context thinning for the ENTIRE context window /// Unlike force_thin which only processes the first third, this processes all messages pub fn force_thin_all(&mut self) -> String { - info!("Manual full context skinnifying triggered"); + debug!("Manual full context skinnifying triggered"); let (message, chars_saved) = self.context_window.thin_context_all(self.session_id.as_deref()); self.thinning_events.push(chars_saved); message @@ -2914,7 +2914,7 @@ impl Agent { /// Reload README.md and AGENTS.md and replace the first system message /// Returns Ok(true) if README was found and reloaded, Ok(false) if no README was present initially pub fn reload_readme(&mut self) -> Result { - info!("Manual README reload triggered"); + debug!("Manual README reload triggered"); // Check if the second message in conversation history is a system message with README content // (The first message should always be the system prompt) @@ -2957,7 +2957,7 @@ impl Agent { // Replace the second message (README) with the new content if let Some(first_msg) = self.context_window.conversation_history.get_mut(1) { first_msg.content = combined_content; - info!("README content reloaded successfully"); + debug!("README content reloaded successfully"); Ok(true) } else { Ok(false) @@ -3191,7 +3191,7 @@ impl Agent { error!("Failed to clear continuation artifacts: {}", e); } - info!("Session cleared"); + debug!("Session cleared"); } /// Restore session from a continuation artifact @@ -3236,7 +3236,7 @@ impl Agent { }); } - info!("Restored full context from session log"); + debug!("Restored full context from session log"); return Ok(true); } } @@ -3261,7 +3261,7 @@ impl Agent { }); } - info!("Restored session from summary"); + debug!("Restored session from summary"); Ok(false) } @@ -3871,7 +3871,7 @@ impl Agent { match provider.stream(request.clone()).await { Ok(stream) => { if attempt > 1 { - info!("Stream started successfully after {} attempts", attempt); + debug!("Stream started successfully after {} attempts", attempt); } debug!("Stream started successfully"); debug!( @@ -6559,7 +6559,7 @@ impl Agent { let driver = mutex.into_inner(); match driver.quit().await { Ok(_) => { - info!("WebDriver session closed successfully"); + debug!("WebDriver session closed successfully"); // Kill the safaridriver process if let Some(mut process) = @@ -6568,7 +6568,7 @@ impl Agent { if let Err(e) = process.kill().await { warn!("Failed to kill safaridriver process: {}", e); } else { - info!("Safaridriver process terminated"); + debug!("Safaridriver process terminated"); } } diff --git a/crates/g3-core/src/retry.rs b/crates/g3-core/src/retry.rs index 458d7e8..67f3369 100644 --- a/crates/g3-core/src/retry.rs +++ b/crates/g3-core/src/retry.rs @@ -10,7 +10,7 @@ use crate::ui_writer::UiWriter; use crate::{Agent, DiscoveryOptions, TaskResult}; use anyhow::Result; use std::time::Instant; -use tracing::{info, warn}; +use tracing::{debug, warn}; /// Configuration for retry behavior #[derive(Debug, Clone)] @@ -142,7 +142,7 @@ where match result { Ok(task_result) => { if retry_count > 0 { - info!( + debug!( "{} task succeeded after {} retries (elapsed: {:?})", config.role_name, retry_count, @@ -259,7 +259,7 @@ where match operation().await { Ok(result) => { if retry_count > 0 { - info!( + debug!( "Operation '{}' succeeded after {} retries", operation_name, retry_count ); diff --git a/crates/g3-core/src/session_continuation.rs b/crates/g3-core/src/session_continuation.rs index 2b25ca9..171fcbb 100644 --- a/crates/g3-core/src/session_continuation.rs +++ b/crates/g3-core/src/session_continuation.rs @@ -6,7 +6,7 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; -use tracing::{debug, error, info, warn}; +use tracing::{debug, error, warn}; /// Version of the session continuation format const CONTINUATION_VERSION: &str = "1.0"; @@ -89,7 +89,7 @@ pub fn save_continuation(continuation: &SessionContinuation) -> Result let json = serde_json::to_string_pretty(continuation)?; std::fs::write(&latest_path, &json)?; - info!("Saved session continuation to {:?}", latest_path); + debug!("Saved session continuation to {:?}", latest_path); Ok(latest_path) } @@ -113,7 +113,7 @@ pub fn load_continuation() -> Result> { ); } - info!("Loaded session continuation from {:?}", latest_path); + debug!("Loaded session continuation from {:?}", latest_path); Ok(Some(continuation)) } @@ -131,7 +131,7 @@ pub fn clear_continuation() -> Result<()> { debug!("Removed session file: {:?}", path); } } - info!("Cleared session continuation artifacts"); + debug!("Cleared session continuation artifacts"); } Ok(()) diff --git a/crates/g3-ensembles/src/flock.rs b/crates/g3-ensembles/src/flock.rs index 17eba1d..78802dd 100644 --- a/crates/g3-ensembles/src/flock.rs +++ b/crates/g3-ensembles/src/flock.rs @@ -7,7 +7,7 @@ use std::path::{Path, PathBuf}; use std::process::Stdio; use tokio::io::{AsyncBufReadExt, BufReader}; use tokio::process::Command; -use tracing::{debug, error, info, warn}; +use tracing::{debug, error, warn}; use uuid::Uuid; use crate::status::{FlockStatus, SegmentState, SegmentStatus}; @@ -174,7 +174,7 @@ impl FlockMode { /// Run flock mode pub async fn run(&mut self) -> Result<()> { - info!( + debug!( "Starting flock mode with {} segments", self.config.num_segments ); @@ -625,7 +625,7 @@ async fn run_segment( status_file: PathBuf, session_id: String, ) -> Result { - info!( + debug!( "Starting segment {} in {}", segment_id, segment_dir.display() diff --git a/crates/g3-execution/src/lib.rs b/crates/g3-execution/src/lib.rs index 2629932..0b75d7a 100644 --- a/crates/g3-execution/src/lib.rs +++ b/crates/g3-execution/src/lib.rs @@ -3,7 +3,7 @@ use regex::Regex; use std::io::Write; use std::process::Command; use tempfile::NamedTempFile; -use tracing::{debug, error, info}; +use tracing::{debug, error}; /// Expand tilde (~) in a path to the user's home directory fn expand_tilde(path: &str) -> String { @@ -72,7 +72,7 @@ impl CodeExecutor { } for (language, code) in code_blocks { - info!("Executing {} code", language); + debug!("Executing {} code", language); if show_code { results.push(format!("šŸ“‹ Running {} code:", language)); @@ -459,7 +459,7 @@ pub fn is_cargo_llvm_cov_installed() -> Result { /// Install llvm-tools-preview via rustup pub fn install_llvm_tools() -> Result<()> { - info!("Installing llvm-tools-preview..."); + debug!("Installing llvm-tools-preview..."); let output = Command::new("rustup") .args(&["component", "add", "llvm-tools-preview"]) .output()?; @@ -469,13 +469,13 @@ pub fn install_llvm_tools() -> Result<()> { anyhow::bail!("Failed to install llvm-tools-preview: {}", stderr); } - info!("āœ… llvm-tools-preview installed successfully"); + debug!("āœ… llvm-tools-preview installed successfully"); Ok(()) } /// Install cargo-llvm-cov via cargo install pub fn install_cargo_llvm_cov() -> Result<()> { - info!("Installing cargo-llvm-cov... (this may take a few minutes)"); + debug!("Installing cargo-llvm-cov... (this may take a few minutes)"); let output = Command::new("cargo") .args(&["install", "cargo-llvm-cov"]) .output()?; @@ -485,7 +485,7 @@ pub fn install_cargo_llvm_cov() -> Result<()> { anyhow::bail!("Failed to install cargo-llvm-cov: {}", stderr); } - info!("āœ… cargo-llvm-cov installed successfully"); + debug!("āœ… cargo-llvm-cov installed successfully"); Ok(()) } @@ -496,20 +496,20 @@ pub fn ensure_coverage_tools_installed() -> Result { // Check and install llvm-tools-preview if !is_llvm_tools_installed()? { - info!("llvm-tools-preview not found, installing..."); + debug!("llvm-tools-preview not found, installing..."); install_llvm_tools()?; already_installed = false; } else { - info!("āœ… llvm-tools-preview is already installed"); + debug!("āœ… llvm-tools-preview is already installed"); } // Check and install cargo-llvm-cov if !is_cargo_llvm_cov_installed()? { - info!("cargo-llvm-cov not found, installing..."); + debug!("cargo-llvm-cov not found, installing..."); install_cargo_llvm_cov()?; already_installed = false; } else { - info!("āœ… cargo-llvm-cov is already installed"); + debug!("āœ… cargo-llvm-cov is already installed"); } Ok(already_installed) diff --git a/crates/g3-providers/src/anthropic.rs b/crates/g3-providers/src/anthropic.rs index e84bfe1..2b26858 100644 --- a/crates/g3-providers/src/anthropic.rs +++ b/crates/g3-providers/src/anthropic.rs @@ -328,7 +328,7 @@ impl AnthropicProvider { tracing::debug!("create_request_body called: max_tokens={}, disable_thinking={}, thinking_budget_tokens={:?}", max_tokens, disable_thinking, self.thinking_budget_tokens); let thinking = if disable_thinking { - tracing::info!( + tracing::debug!( "Thinking mode explicitly disabled for this request (max_tokens={})", max_tokens ); diff --git a/crates/g3-providers/src/databricks.rs b/crates/g3-providers/src/databricks.rs index 18fe756..95fda57 100644 --- a/crates/g3-providers/src/databricks.rs +++ b/crates/g3-providers/src/databricks.rs @@ -64,7 +64,7 @@ use serde::{Deserialize, Serialize}; use std::time::Duration; use tokio::sync::mpsc; use tokio_stream::wrappers::ReceiverStream; -use tracing::{debug, error, info, warn}; +use tracing::{debug, error, warn}; use crate::{ CompletionChunk, CompletionRequest, CompletionResponse, CompletionStream, LLMProvider, Message, @@ -166,7 +166,7 @@ impl DatabricksProvider { .build() .map_err(|e| anyhow!("Failed to create HTTP client: {}", e))?; - info!( + debug!( "Initialized Databricks provider with model: {} on host: {}", model, host ); @@ -196,7 +196,7 @@ impl DatabricksProvider { .build() .map_err(|e| anyhow!("Failed to create HTTP client: {}", e))?; - info!("Initialized Databricks provider '{}' with model: {} on host: {}", name, model, host); + debug!("Initialized Databricks provider '{}' with model: {} on host: {}", name, model, host); Ok(Self { client, @@ -220,7 +220,7 @@ impl DatabricksProvider { .build() .map_err(|e| anyhow!("Failed to create HTTP client: {}", e))?; - info!( + debug!( "Initialized Databricks provider with OAuth for model: {} on host: {}", model, host ); @@ -249,7 +249,7 @@ impl DatabricksProvider { .build() .map_err(|e| anyhow!("Failed to create HTTP client: {}", e))?; - info!("Initialized Databricks provider '{}' with OAuth for model: {} on host: {}", name, model, host); + debug!("Initialized Databricks provider '{}' with OAuth for model: {} on host: {}", name, model, host); Ok(Self { client, @@ -857,7 +857,7 @@ impl LLMProvider for DatabricksProvider { if status == reqwest::StatusCode::FORBIDDEN && (error_text.contains("Invalid Token") || error_text.contains("invalid_token")) { - info!("Received 403 Invalid Token error, attempting to refresh OAuth token"); + debug!("Received 403 Invalid Token error, attempting to refresh OAuth token"); // Try to refresh the token if we're using OAuth if let DatabricksAuth::OAuth { .. } = &provider_clone.auth { @@ -867,7 +867,7 @@ impl LLMProvider for DatabricksProvider { // Try to get a new token (will attempt refresh or new OAuth flow) match provider_clone.auth.get_token().await { Ok(_new_token) => { - info!("Successfully refreshed OAuth token, retrying request"); + debug!("Successfully refreshed OAuth token, retrying request"); // Retry the request with the new token response = provider_clone @@ -1038,7 +1038,7 @@ impl LLMProvider for DatabricksProvider { if status == reqwest::StatusCode::FORBIDDEN && (error_text.contains("Invalid Token") || error_text.contains("invalid_token")) { - info!("Received 403 Invalid Token error, attempting to refresh OAuth token"); + debug!("Received 403 Invalid Token error, attempting to refresh OAuth token"); // Try to refresh the token if we're using OAuth if let DatabricksAuth::OAuth { .. } = &provider_clone.auth { @@ -1048,7 +1048,7 @@ impl LLMProvider for DatabricksProvider { // Try to get a new token (will attempt refresh or new OAuth flow) match provider_clone.auth.get_token().await { Ok(_new_token) => { - info!("Successfully refreshed OAuth token, retrying streaming request"); + debug!("Successfully refreshed OAuth token, retrying streaming request"); // Retry the request with the new token response = provider_clone diff --git a/crates/g3-providers/src/embedded.rs b/crates/g3-providers/src/embedded.rs index 3bf8e1b..999e489 100644 --- a/crates/g3-providers/src/embedded.rs +++ b/crates/g3-providers/src/embedded.rs @@ -12,7 +12,7 @@ use std::sync::Arc; use tokio::sync::mpsc; use tokio::sync::Mutex; use tokio_stream::wrappers::ReceiverStream; -use tracing::{debug, error, info}; +use tracing::{debug, error}; pub struct EmbeddedProvider { session: Arc>, @@ -32,7 +32,7 @@ impl EmbeddedProvider { gpu_layers: Option, threads: Option, ) -> Result { - info!("Loading embedded model from: {}", model_path); + debug!("Loading embedded model from: {}", model_path); // Expand tilde in path let expanded_path = shellexpand::tilde(&model_path); @@ -41,7 +41,7 @@ impl EmbeddedProvider { // If model doesn't exist and it's the default Qwen model, offer to download it if !model_path_buf.exists() { if model_path.contains("qwen2.5-7b-instruct-q3_k_m.gguf") { - info!("Model file not found. Attempting to download Qwen 2.5 7B model..."); + debug!("Model file not found. Attempting to download Qwen 2.5 7B model..."); Self::download_qwen_model(&model_path_buf)?; } else { anyhow::bail!("Model file not found: {}", model_path_buf.display()); @@ -55,14 +55,14 @@ impl EmbeddedProvider { if let Some(gpu_layers) = gpu_layers { params.n_gpu_layers = gpu_layers; - info!("Using {} GPU layers", gpu_layers); + debug!("Using {} GPU layers", gpu_layers); } let context_size = context_length.unwrap_or(4096); - info!("Using context length: {}", context_size); + debug!("Using context length: {}", context_size); // Load the model - info!("Loading model..."); + debug!("Loading model..."); let model = LlamaModel::load_from_file(model_path, params) .map_err(|e| anyhow::anyhow!("Failed to load model: {}", e))?; @@ -79,7 +79,7 @@ impl EmbeddedProvider { .create_session(session_params) .map_err(|e| anyhow::anyhow!("Failed to create session: {}", e))?; - info!("Successfully loaded {} model", model_type); + debug!("Successfully loaded {} model", model_type); Ok(Self { session: Arc::new(Mutex::new(session)), @@ -330,7 +330,7 @@ impl EmbeddedProvider { Ok(inner_result) => match inner_result { Ok(task_result) => match task_result { Ok((text, token_count)) => { - info!( + debug!( "Completed generation: {} tokens (dynamic limit was {})", token_count, dynamic_max_tokens ); @@ -448,9 +448,9 @@ impl EmbeddedProvider { fs::create_dir_all(parent)?; } - info!("Downloading Qwen 2.5 7B model (Q3_K_M quantization, ~3.5GB)..."); - info!("This is a one-time download that may take several minutes depending on your connection."); - info!("Downloading to: {}", model_path.display()); + debug!("Downloading Qwen 2.5 7B model (Q3_K_M quantization, ~3.5GB)..."); + debug!("This is a one-time download that may take several minutes depending on your connection."); + debug!("Downloading to: {}", model_path.display()); // Use curl with progress bar for download let output = Command::new("curl") @@ -497,7 +497,7 @@ impl EmbeddedProvider { ); } - info!("Successfully downloaded Qwen 2.5 7B model ({}MB)", size_mb); + debug!("Successfully downloaded Qwen 2.5 7B model ({}MB)", size_mb); Ok(()) } } diff --git a/crates/g3-providers/src/oauth.rs b/crates/g3-providers/src/oauth.rs index 75c9d50..893605a 100644 --- a/crates/g3-providers/src/oauth.rs +++ b/crates/g3-providers/src/oauth.rs @@ -392,7 +392,7 @@ pub async fn get_oauth_token_async( if let Err(e) = token_cache.save_token(&new_token) { tracing::warn!("Failed to save refreshed token: {}", e); } - tracing::info!("Successfully refreshed token"); + tracing::debug!("Successfully refreshed token"); return Ok(new_token.access_token); } Err(e) => {