diff --git a/crates/goose/src/providers/anthropic.rs b/crates/goose/src/providers/anthropic.rs index 62ee19cdeb46..588642f8fb0e 100644 --- a/crates/goose/src/providers/anthropic.rs +++ b/crates/goose/src/providers/anthropic.rs @@ -183,7 +183,7 @@ impl Provider for AnthropicProvider { let usage = get_usage(&response)?; let model = get_model(&response); - emit_debug_trace(self, &payload, &response, &usage); + emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/azure.rs b/crates/goose/src/providers/azure.rs index 2eb5e1ff6aae..2856ba0c191f 100644 --- a/crates/goose/src/providers/azure.rs +++ b/crates/goose/src/providers/azure.rs @@ -142,7 +142,7 @@ impl Provider for AzureProvider { Err(e) => return Err(e), }; let model = get_model(&response); - emit_debug_trace(self, &payload, &response, &usage); + emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/databricks.rs b/crates/goose/src/providers/databricks.rs index ac24dde1fd2e..6fd280073630 100644 --- a/crates/goose/src/providers/databricks.rs +++ b/crates/goose/src/providers/databricks.rs @@ -270,7 +270,7 @@ impl Provider for DatabricksProvider { Err(e) => return Err(e), }; let model = get_model(&response); - super::utils::emit_debug_trace(self, &payload, &response, &usage); + super::utils::emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } diff --git a/crates/goose/src/providers/gcpvertexai.rs b/crates/goose/src/providers/gcpvertexai.rs index 29e25200842d..cd89376e464d 100644 --- a/crates/goose/src/providers/gcpvertexai.rs +++ b/crates/goose/src/providers/gcpvertexai.rs @@ -501,7 +501,7 @@ impl Provider for GcpVertexAIProvider { let response = self.post(request.clone(), &context).await?; let usage = get_usage(&response, &context)?; - emit_debug_trace(self, &request, &response, &usage); + emit_debug_trace(&self.model, &request, &response, &usage); // Convert response to message let message = response_to_message(response, context)?; diff --git a/crates/goose/src/providers/google.rs b/crates/goose/src/providers/google.rs index 0c4ea077443b..1fe4bf07ee97 100644 --- a/crates/goose/src/providers/google.rs +++ b/crates/goose/src/providers/google.rs @@ -133,7 +133,7 @@ impl Provider for GoogleProvider { Some(model_version) => model_version.as_str().unwrap_or_default().to_string(), None => self.model.model_name.clone(), }; - emit_debug_trace(self, &payload, &response, &usage); + emit_debug_trace(&self.model, &payload, &response, &usage); let provider_usage = ProviderUsage::new(model, usage); Ok((message, provider_usage)) } diff --git a/crates/goose/src/providers/groq.rs b/crates/goose/src/providers/groq.rs index a29402006f60..793d78018f7c 100644 --- a/crates/goose/src/providers/groq.rs +++ b/crates/goose/src/providers/groq.rs @@ -148,7 +148,7 @@ impl Provider for GroqProvider { Err(e) => return Err(e), }; let model = get_model(&response); - super::utils::emit_debug_trace(self, &payload, &response, &usage); + super::utils::emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/ollama.rs b/crates/goose/src/providers/ollama.rs index f658b428870c..0b109c86f439 100644 --- a/crates/goose/src/providers/ollama.rs +++ b/crates/goose/src/providers/ollama.rs @@ -205,7 +205,7 @@ impl Provider for OllamaProvider { Err(e) => return Err(e), }; let model = get_model(&response); - super::utils::emit_debug_trace(self, &payload, &response, &usage); + super::utils::emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/openai.rs b/crates/goose/src/providers/openai.rs index f997d4835039..6a6c45f0dca2 100644 --- a/crates/goose/src/providers/openai.rs +++ b/crates/goose/src/providers/openai.rs @@ -150,7 +150,7 @@ impl Provider for OpenAiProvider { Err(e) => return Err(e), }; let model = get_model(&response); - emit_debug_trace(self, &payload, &response, &usage); + emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/openrouter.rs b/crates/goose/src/providers/openrouter.rs index 7acd8d29cdf2..2bd73115237f 100644 --- a/crates/goose/src/providers/openrouter.rs +++ b/crates/goose/src/providers/openrouter.rs @@ -238,7 +238,7 @@ impl Provider for OpenRouterProvider { Err(e) => return Err(e), }; let model = get_model(&response); - emit_debug_trace(self, &payload, &response, &usage); + emit_debug_trace(&self.model, &payload, &response, &usage); Ok((message, ProviderUsage::new(model, usage))) } } diff --git a/crates/goose/src/providers/utils.rs b/crates/goose/src/providers/utils.rs index ef652b635387..6d0898319a5e 100644 --- a/crates/goose/src/providers/utils.rs +++ b/crates/goose/src/providers/utils.rs @@ -1,5 +1,6 @@ use super::base::Usage; use super::errors::GoogleErrorCode; +use crate::model::ModelConfig; use anyhow::Result; use base64::Engine; use regex::Regex; @@ -316,21 +317,15 @@ pub fn unescape_json_values(value: &Value) -> Value { } } -pub fn emit_debug_trace( - model_config: &T, - payload: &impl serde::Serialize, +pub fn emit_debug_trace( + model_config: &ModelConfig, + payload: &Value, response: &Value, usage: &Usage, ) { - // Handle both Map and Value payload types - let payload_str = match serde_json::to_value(payload) { - Ok(value) => serde_json::to_string_pretty(&value).unwrap_or_default(), - Err(_) => serde_json::to_string_pretty(&payload).unwrap_or_default(), - }; - tracing::debug!( model_config = %serde_json::to_string_pretty(model_config).unwrap_or_default(), - input = %payload_str, + input = %serde_json::to_string_pretty(payload).unwrap_or_default(), output = %serde_json::to_string_pretty(response).unwrap_or_default(), input_tokens = ?usage.input_tokens.unwrap_or_default(), output_tokens = ?usage.output_tokens.unwrap_or_default(),