diff --git a/Cargo.lock b/Cargo.lock index 4880424b73..e6a0d087fa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8944,6 +8944,7 @@ dependencies = [ "http_client", "icons", "image", + "log", "parking_lot", "proto", "schemars", diff --git a/crates/language_model/Cargo.toml b/crates/language_model/Cargo.toml index aa4815e5bb..b718c530f5 100644 --- a/crates/language_model/Cargo.toml +++ b/crates/language_model/Cargo.toml @@ -26,6 +26,7 @@ gpui.workspace = true http_client.workspace = true icons.workspace = true image.workspace = true +log.workspace = true parking_lot.workspace = true proto.workspace = true schemars.workspace = true diff --git a/crates/language_model/src/telemetry.rs b/crates/language_model/src/telemetry.rs index 62b199bd45..9bd9b903c2 100644 --- a/crates/language_model/src/telemetry.rs +++ b/crates/language_model/src/telemetry.rs @@ -1,5 +1,5 @@ -use anthropic::{ANTHROPIC_API_URL, AnthropicError}; -use anyhow::{Context as _, Result, anyhow}; +use anthropic::ANTHROPIC_API_URL; +use anyhow::{Context as _, anyhow}; use client::telemetry::Telemetry; use gpui::BackgroundExecutor; use http_client::{AsyncBody, HttpClient, Method, Request as HttpRequest}; @@ -20,13 +20,17 @@ pub fn report_assistant_event( if let Some(telemetry) = telemetry.as_ref() { telemetry.report_assistant_event(event.clone()); if telemetry.metrics_enabled() && event.model_provider == ANTHROPIC_PROVIDER_ID { - executor - .spawn(async move { - report_anthropic_event(event, client, model_api_key) - .await - .log_err(); - }) - .detach(); + if let Some(api_key) = model_api_key { + executor + .spawn(async move { + report_anthropic_event(event, client, api_key) + .await + .log_err(); + }) + .detach(); + } else { + log::error!("Cannot send Anthropic telemetry because API key is missing"); + } } } } @@ -34,17 +38,8 @@ pub fn report_assistant_event( async fn report_anthropic_event( event: AssistantEventData, client: Arc, - model_api_key: Option, -) -> Result<(), AnthropicError> { - let api_key = match model_api_key { - Some(key) => key, - None => { - return Err(AnthropicError::Other(anyhow!( - "Anthropic API key is not set" - ))); - } - }; - + api_key: String, +) -> anyhow::Result<()> { let uri = format!("{ANTHROPIC_API_URL}/v1/log/zed"); let request_builder = HttpRequest::builder() .method(Method::POST) @@ -72,19 +67,19 @@ async fn report_anthropic_event( let request = request_builder .body(AsyncBody::from(serialized_event.to_string())) - .context("failed to construct request body")?; + .context("Failed to construct Anthropic telemetry HTTP request body")?; let response = client .send(request) .await - .context("failed to send request to Anthropic")?; + .context("Failed to send telemetry HTTP request to Anthropic")?; if response.status().is_success() { - return Ok(()); + Ok(()) + } else { + Err(anyhow!( + "Anthropic telemetry logging failed with HTTP status: {}", + response.status() + )) } - - return Err(AnthropicError::Other(anyhow!( - "Failed to log: {}", - response.status(), - ))); }