parent
b7fd5718a3
commit
077767a3b0
4 changed files with 35 additions and 47 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -437,6 +437,7 @@ dependencies = [
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"smol",
|
"smol",
|
||||||
"strum",
|
"strum",
|
||||||
|
"telemetry",
|
||||||
"telemetry_events",
|
"telemetry_events",
|
||||||
"terminal",
|
"terminal",
|
||||||
"terminal_view",
|
"terminal_view",
|
||||||
|
|
|
@ -80,6 +80,7 @@ similar.workspace = true
|
||||||
smallvec.workspace = true
|
smallvec.workspace = true
|
||||||
smol.workspace = true
|
smol.workspace = true
|
||||||
strum.workspace = true
|
strum.workspace = true
|
||||||
|
telemetry.workspace = true
|
||||||
telemetry_events.workspace = true
|
telemetry_events.workspace = true
|
||||||
terminal.workspace = true
|
terminal.workspace = true
|
||||||
terminal_view.workspace = true
|
terminal_view.workspace = true
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
mod event_coalescer;
|
mod event_coalescer;
|
||||||
|
|
||||||
use crate::{ChannelId, TelemetrySettings};
|
use crate::TelemetrySettings;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use clock::SystemClock;
|
use clock::SystemClock;
|
||||||
use collections::{HashMap, HashSet};
|
use collections::{HashMap, HashSet};
|
||||||
|
@ -14,16 +14,11 @@ use settings::{Settings, SettingsStore};
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::sync::LazyLock;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
use std::{
|
use std::{env, mem, path::PathBuf, sync::Arc, time::Duration};
|
||||||
env, mem,
|
|
||||||
path::PathBuf,
|
|
||||||
sync::{Arc, LazyLock},
|
|
||||||
time::Duration,
|
|
||||||
};
|
|
||||||
use telemetry_events::{
|
use telemetry_events::{
|
||||||
AppEvent, AssistantEvent, CallEvent, EditEvent, Event, EventRequestBody, EventWrapper,
|
AppEvent, AssistantEvent, AssistantPhase, EditEvent, Event, EventRequestBody, EventWrapper,
|
||||||
InlineCompletionEvent,
|
|
||||||
};
|
};
|
||||||
use util::{ResultExt, TryFutureExt};
|
use util::{ResultExt, TryFutureExt};
|
||||||
use worktree::{UpdatedEntriesSet, WorktreeId};
|
use worktree::{UpdatedEntriesSet, WorktreeId};
|
||||||
|
@ -338,38 +333,26 @@ impl Telemetry {
|
||||||
drop(state);
|
drop(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn report_inline_completion_event(
|
|
||||||
self: &Arc<Self>,
|
|
||||||
provider: String,
|
|
||||||
suggestion_accepted: bool,
|
|
||||||
file_extension: Option<String>,
|
|
||||||
) {
|
|
||||||
let event = Event::InlineCompletion(InlineCompletionEvent {
|
|
||||||
provider,
|
|
||||||
suggestion_accepted,
|
|
||||||
file_extension,
|
|
||||||
});
|
|
||||||
|
|
||||||
self.report_event(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn report_assistant_event(self: &Arc<Self>, event: AssistantEvent) {
|
pub fn report_assistant_event(self: &Arc<Self>, event: AssistantEvent) {
|
||||||
self.report_event(Event::Assistant(event));
|
let event_type = match event.phase {
|
||||||
}
|
AssistantPhase::Response => "Assistant Responded",
|
||||||
|
AssistantPhase::Invoked => "Assistant Invoked",
|
||||||
|
AssistantPhase::Accepted => "Assistant Response Accepted",
|
||||||
|
AssistantPhase::Rejected => "Assistant Response Rejected",
|
||||||
|
};
|
||||||
|
|
||||||
pub fn report_call_event(
|
telemetry::event!(
|
||||||
self: &Arc<Self>,
|
event_type,
|
||||||
operation: &'static str,
|
conversation_id = event.conversation_id,
|
||||||
room_id: Option<u64>,
|
kind = event.kind,
|
||||||
channel_id: Option<ChannelId>,
|
phase = event.phase,
|
||||||
) {
|
message_id = event.message_id,
|
||||||
let event = Event::Call(CallEvent {
|
model = event.model,
|
||||||
operation: operation.to_string(),
|
model_provider = event.model_provider,
|
||||||
room_id,
|
response_latency = event.response_latency,
|
||||||
channel_id: channel_id.map(|cid| cid.0),
|
error_message = event.error_message,
|
||||||
});
|
language_name = event.language_name,
|
||||||
|
);
|
||||||
self.report_event(event)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn report_app_event(self: &Arc<Self>, operation: String) -> Event {
|
pub fn report_app_event(self: &Arc<Self>, operation: String) -> Event {
|
||||||
|
|
|
@ -4733,9 +4733,7 @@ impl Editor {
|
||||||
let Some(provider) = self.inline_completion_provider() else {
|
let Some(provider) = self.inline_completion_provider() else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Some(project) = self.project.as_ref() else {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
let Some((_, buffer, _)) = self
|
let Some((_, buffer, _)) = self
|
||||||
.buffer
|
.buffer
|
||||||
.read(cx)
|
.read(cx)
|
||||||
|
@ -4744,15 +4742,20 @@ impl Editor {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let project = project.read(cx);
|
|
||||||
let extension = buffer
|
let extension = buffer
|
||||||
.read(cx)
|
.read(cx)
|
||||||
.file()
|
.file()
|
||||||
.and_then(|file| Some(file.path().extension()?.to_string_lossy().to_string()));
|
.and_then(|file| Some(file.path().extension()?.to_string_lossy().to_string()));
|
||||||
project.client().telemetry().report_inline_completion_event(
|
|
||||||
provider.name().into(),
|
let event_type = match accepted {
|
||||||
accepted,
|
true => "Inline Completion Accepted",
|
||||||
extension,
|
false => "Inline Completion Discarded",
|
||||||
|
};
|
||||||
|
telemetry::event!(
|
||||||
|
event_type,
|
||||||
|
provider = provider.name(),
|
||||||
|
suggestion_accepted = accepted,
|
||||||
|
file_extension = extension,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue