diff --git a/crates/goose/src/providers/base.rs b/crates/goose/src/providers/base.rs index f8dfadee3757..ce46e9585f8f 100644 --- a/crates/goose/src/providers/base.rs +++ b/crates/goose/src/providers/base.rs @@ -386,18 +386,15 @@ pub trait Provider: Send + Sync { RetryConfig::default() } - /// Optional hook to fetch supported models. async fn fetch_supported_models(&self) -> Result>, ProviderError> { Ok(None) } - /// Check if this provider supports embeddings fn supports_embeddings(&self) -> bool { false } - /// Check if this provider supports cache control - fn supports_cache_control(&self) -> bool { + async fn supports_cache_control(&self) -> bool { false } diff --git a/crates/goose/src/providers/litellm.rs b/crates/goose/src/providers/litellm.rs index a0839724e8fc..e72fa289060b 100644 --- a/crates/goose/src/providers/litellm.rs +++ b/crates/goose/src/providers/litellm.rs @@ -174,7 +174,7 @@ impl Provider for LiteLLMProvider { &ImageFormat::OpenAi, )?; - if self.supports_cache_control() { + if self.supports_cache_control().await { payload = update_request_for_cache_control(&payload); } @@ -197,10 +197,8 @@ impl Provider for LiteLLMProvider { true } - fn supports_cache_control(&self) -> bool { - if let Ok(models) = tokio::task::block_in_place(|| { - tokio::runtime::Handle::current().block_on(self.fetch_models()) - }) { + async fn supports_cache_control(&self) -> bool { + if let Ok(models) = self.fetch_models().await { if let Some(model_info) = models.iter().find(|m| m.name == self.model.model_name) { return model_info.supports_cache_control.unwrap_or(false); } diff --git a/crates/goose/src/providers/openai.rs b/crates/goose/src/providers/openai.rs index c00d8e6a5ed5..6e81af5928ad 100644 --- a/crates/goose/src/providers/openai.rs +++ b/crates/goose/src/providers/openai.rs @@ -231,6 +231,7 @@ impl Provider for OpenAiProvider { tracing::debug!("Failed to get usage data"); Usage::default() }); + let model = get_model(&json_response); log.write(&json_response, Some(&usage))?; Ok((message, ProviderUsage::new(model, usage))) diff --git a/crates/goose/src/providers/openrouter.rs b/crates/goose/src/providers/openrouter.rs index f890e87b704e..279b32c26956 100644 --- a/crates/goose/src/providers/openrouter.rs +++ b/crates/goose/src/providers/openrouter.rs @@ -193,7 +193,7 @@ fn update_request_for_anthropic(original_payload: &Value) -> Value { payload } -fn create_request_based_on_model( +async fn create_request_based_on_model( provider: &OpenRouterProvider, system: &str, messages: &[Message], @@ -207,7 +207,7 @@ fn create_request_based_on_model( &super::utils::ImageFormat::OpenAi, )?; - if provider.supports_cache_control() { + if provider.supports_cache_control().await { payload = update_request_for_anthropic(&payload); } @@ -257,8 +257,7 @@ impl Provider for OpenRouterProvider { messages: &[Message], tools: &[Tool], ) -> Result<(Message, ProviderUsage), ProviderError> { - // Create the base payload - let payload = create_request_based_on_model(self, system, messages, tools)?; + let payload = create_request_based_on_model(self, system, messages, tools).await?; let mut log = RequestLog::start(model_config, &payload)?; // Make request @@ -357,7 +356,7 @@ impl Provider for OpenRouterProvider { Ok(Some(models)) } - fn supports_cache_control(&self) -> bool { + async fn supports_cache_control(&self) -> bool { self.model .model_name .starts_with(OPENROUTER_MODEL_PREFIX_ANTHROPIC) diff --git a/crates/goose/src/providers/tetrate.rs b/crates/goose/src/providers/tetrate.rs index e771d4916019..006df8adc11d 100644 --- a/crates/goose/src/providers/tetrate.rs +++ b/crates/goose/src/providers/tetrate.rs @@ -165,7 +165,6 @@ impl Provider for TetrateProvider { messages: &[Message], tools: &[Tool], ) -> Result<(Message, ProviderUsage), ProviderError> { - // Create the base payload using the provided model_config let payload = create_request( model_config, system,