diff --git a/crates/agent_ui/src/buffer_codegen.rs b/crates/agent_ui/src/buffer_codegen.rs index 9857dd8a4752e567b6c22ee0fb5932c79a15d82a..420f8665e349c4e79222cdfa034de44971fab538 100644 --- a/crates/agent_ui/src/buffer_codegen.rs +++ b/crates/agent_ui/src/buffer_codegen.rs @@ -18,6 +18,9 @@ use language_model::{ LanguageModelRequestTool, LanguageModelTextStream, LanguageModelToolChoice, LanguageModelToolUse, Role, TokenUsage, }; +use language_models::provider::anthropic::telemetry::{ + AnthropicCompletionType, AnthropicEventData, AnthropicEventReporter, AnthropicEventType, +}; use multi_buffer::MultiBufferRow; use parking_lot::Mutex; use prompt_store::PromptBuilder; @@ -637,7 +640,7 @@ impl CodegenAlternative { stream: impl 'static + Future>, cx: &mut Context, ) -> Task<()> { - let anthropic_reporter = language_model::AnthropicEventReporter::new(&model, cx); + let anthropic_reporter = AnthropicEventReporter::new(&model, cx); let session_id = self.session_id; let model_telemetry_id = model.telemetry_id(); let model_provider_id = model.provider_id().to_string(); @@ -830,9 +833,9 @@ impl CodegenAlternative { error_message = error_message.as_deref(), ); - anthropic_reporter.report(language_model::AnthropicEventData { - completion_type: language_model::AnthropicCompletionType::Editor, - event: language_model::AnthropicEventType::Response, + anthropic_reporter.report(AnthropicEventData { + completion_type: AnthropicCompletionType::Editor, + event: AnthropicEventType::Response, language_name: language_name.map(|n| n.to_string()), message_id, }); diff --git a/crates/agent_ui/src/inline_assistant.rs b/crates/agent_ui/src/inline_assistant.rs index 3b98e496d4732deaf54be9b4e14da380285f467f..01543b657fc2d00fbf8c68cd96c6329d2f4952d6 100644 --- a/crates/agent_ui/src/inline_assistant.rs +++ b/crates/agent_ui/src/inline_assistant.rs @@ -1,5 +1,6 @@ -use language_model::AnthropicEventData; -use language_model::report_anthropic_event; +use language_models::provider::anthropic::telemetry::{ + AnthropicCompletionType, AnthropicEventData, AnthropicEventType, report_anthropic_event, +}; use std::cmp; use std::mem; use std::ops::Range; @@ -467,8 +468,8 @@ impl InlineAssistant { report_anthropic_event( &model.model, AnthropicEventData { - completion_type: language_model::AnthropicCompletionType::Editor, - event: language_model::AnthropicEventType::Invoked, + completion_type: AnthropicCompletionType::Editor, + event: AnthropicEventType::Invoked, language_name: buffer.language().map(|language| language.name().to_proto()), message_id: None, }, @@ -1105,13 +1106,13 @@ impl InlineAssistant { ( "rejected", "Assistant Response Rejected", - language_model::AnthropicEventType::Reject, + AnthropicEventType::Reject, ) } else { ( "accepted", "Assistant Response Accepted", - language_model::AnthropicEventType::Accept, + AnthropicEventType::Accept, ) }; @@ -1128,8 +1129,8 @@ impl InlineAssistant { report_anthropic_event( &model.model, - language_model::AnthropicEventData { - completion_type: language_model::AnthropicCompletionType::Editor, + AnthropicEventData { + completion_type: AnthropicCompletionType::Editor, event: anthropic_event_type, language_name, message_id, diff --git a/crates/agent_ui/src/terminal_codegen.rs b/crates/agent_ui/src/terminal_codegen.rs index e93d3d3991378ddb4156b264be1f0a5ab4d4faac..19adf2d880607091526e94bb0f8bfbb2d944dfa7 100644 --- a/crates/agent_ui/src/terminal_codegen.rs +++ b/crates/agent_ui/src/terminal_codegen.rs @@ -2,6 +2,9 @@ use crate::inline_prompt_editor::CodegenStatus; use futures::{SinkExt, StreamExt, channel::mpsc}; use gpui::{App, AppContext as _, Context, Entity, EventEmitter, Task}; use language_model::{ConfiguredModel, LanguageModelRegistry, LanguageModelRequest}; +use language_models::provider::anthropic::telemetry::{ + AnthropicCompletionType, AnthropicEventData, AnthropicEventReporter, AnthropicEventType, +}; use std::time::Instant; use terminal::Terminal; use uuid::Uuid; @@ -40,7 +43,7 @@ impl TerminalCodegen { return; }; - let anthropic_reporter = language_model::AnthropicEventReporter::new(&model, cx); + let anthropic_reporter = AnthropicEventReporter::new(&model, cx); let session_id = self.session_id; let model_telemetry_id = model.telemetry_id(); let model_provider_id = model.provider_id().to_string(); @@ -94,9 +97,9 @@ impl TerminalCodegen { error_message = error_message, ); - anthropic_reporter.report(language_model::AnthropicEventData { - completion_type: language_model::AnthropicCompletionType::Terminal, - event: language_model::AnthropicEventType::Response, + anthropic_reporter.report(AnthropicEventData { + completion_type: AnthropicCompletionType::Terminal, + event: AnthropicEventType::Response, language_name: None, message_id, }); diff --git a/crates/agent_ui/src/terminal_inline_assistant.rs b/crates/agent_ui/src/terminal_inline_assistant.rs index d8bcabf276e76c4701894d2830af88171072fe49..89c1ec431386e548dc9188b46fe2f88ffef77668 100644 --- a/crates/agent_ui/src/terminal_inline_assistant.rs +++ b/crates/agent_ui/src/terminal_inline_assistant.rs @@ -17,7 +17,10 @@ use gpui::{App, Entity, Focusable, Global, Subscription, Task, UpdateGlobal, Wea use language::Buffer; use language_model::{ CompletionIntent, ConfiguredModel, LanguageModelRegistry, LanguageModelRequest, - LanguageModelRequestMessage, Role, report_anthropic_event, + LanguageModelRequestMessage, Role, +}; +use language_models::provider::anthropic::telemetry::{ + AnthropicCompletionType, AnthropicEventData, AnthropicEventType, report_anthropic_event, }; use project::Project; use prompt_store::{PromptBuilder, PromptStore}; @@ -312,13 +315,13 @@ impl TerminalInlineAssistant { ( "rejected", "Assistant Response Rejected", - language_model::AnthropicEventType::Reject, + AnthropicEventType::Reject, ) } else { ( "accepted", "Assistant Response Accepted", - language_model::AnthropicEventType::Accept, + AnthropicEventType::Accept, ) }; @@ -335,8 +338,8 @@ impl TerminalInlineAssistant { report_anthropic_event( &model, - language_model::AnthropicEventData { - completion_type: language_model::AnthropicCompletionType::Terminal, + AnthropicEventData { + completion_type: AnthropicCompletionType::Terminal, event: anthropic_event_type, language_name: None, message_id, diff --git a/crates/language_model/src/language_model.rs b/crates/language_model/src/language_model.rs index 2f715007ec4d8c2906c0254d4bb458d056d8585e..1fae41094e6a6176eeb18842841f4fd1ebb2a9eb 100644 --- a/crates/language_model/src/language_model.rs +++ b/crates/language_model/src/language_model.rs @@ -4,7 +4,6 @@ mod rate_limiter; mod registry; mod request; mod role; -mod telemetry; pub mod tool_schema; #[cfg(any(test, feature = "test-support"))] @@ -38,7 +37,6 @@ pub use crate::rate_limiter::*; pub use crate::registry::*; pub use crate::request::*; pub use crate::role::*; -pub use crate::telemetry::*; pub use crate::tool_schema::LanguageModelToolSchemaFormat; pub use zed_env_vars::{EnvVar, env_var}; diff --git a/crates/language_models/src/provider/anthropic.rs b/crates/language_models/src/provider/anthropic.rs index 1fd79fb3a93d978d0912abbc4f0688e0bbe846e6..f9ec204e5a65dd31f8b0280e91d4beb4004d29c8 100644 --- a/crates/language_models/src/provider/anthropic.rs +++ b/crates/language_models/src/provider/anthropic.rs @@ -1,3 +1,5 @@ +pub mod telemetry; + use anthropic::{ ANTHROPIC_API_URL, AnthropicError, AnthropicModelMode, ContentDelta, CountTokensRequest, Event, ResponseContent, ToolResultContent, ToolResultPart, Usage, diff --git a/crates/language_model/src/telemetry.rs b/crates/language_models/src/provider/anthropic/telemetry.rs similarity index 95% rename from crates/language_model/src/telemetry.rs rename to crates/language_models/src/provider/anthropic/telemetry.rs index 6d7f4df7f644115cae7b2148f4d78fde19674344..75fb11a81b479635ea02db77a2df8a769e795e01 100644 --- a/crates/language_model/src/telemetry.rs +++ b/crates/language_models/src/provider/anthropic/telemetry.rs @@ -1,8 +1,8 @@ -use crate::ANTHROPIC_PROVIDER_ID; use anthropic::ANTHROPIC_API_URL; use anyhow::{Context as _, anyhow}; use gpui::BackgroundExecutor; use http_client::{AsyncBody, HttpClient, Method, Request as HttpRequest}; +use language_model::{ANTHROPIC_PROVIDER_ID, LanguageModel}; use std::env; use std::sync::Arc; use util::ResultExt; @@ -52,7 +52,7 @@ impl AnthropicEventType { } pub fn report_anthropic_event( - model: &Arc, + model: &Arc, event: AnthropicEventData, cx: &gpui::App, ) { @@ -69,7 +69,7 @@ pub struct AnthropicEventReporter { } impl AnthropicEventReporter { - pub fn new(model: &Arc, cx: &gpui::App) -> Self { + pub fn new(model: &Arc, cx: &gpui::App) -> Self { Self { http_client: cx.http_client(), executor: cx.background_executor().clone(),