From ab98d4889bb9bd629c5497fa1187b0911d67417c Mon Sep 17 00:00:00 2001 From: Adam Wolff Date: Tue, 22 Oct 2024 09:45:01 -0700 Subject: [PATCH] assistant: Add tracking fields to Codegen for alternative assists (#19467) Added some tracking fields to Codegen and CodegenAlternatives in order to collect data for experimentation in a fork. Release Notes: - N/A --- crates/assistant/src/inline_assistant.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/assistant/src/inline_assistant.rs b/crates/assistant/src/inline_assistant.rs index 6a80813f3422301c4d7d4afd5833282549b4009c..0b9ee0eae2156b10dd420808dc7bcbc4104d3008 100644 --- a/crates/assistant/src/inline_assistant.rs +++ b/crates/assistant/src/inline_assistant.rs @@ -2256,6 +2256,7 @@ pub enum CodegenEvent { pub struct Codegen { alternatives: Vec>, active_alternative: usize, + seen_alternatives: HashSet, subscriptions: Vec, buffer: Model, range: Range, @@ -2286,6 +2287,7 @@ impl Codegen { let mut this = Self { alternatives: vec![codegen], active_alternative: 0, + seen_alternatives: HashSet::default(), subscriptions: Vec::new(), buffer, range, @@ -2338,6 +2340,7 @@ impl Codegen { fn activate(&mut self, index: usize, cx: &mut ModelContext) { self.active_alternative() .update(cx, |codegen, cx| codegen.set_active(false, cx)); + self.seen_alternatives.insert(index); self.active_alternative = index; self.active_alternative() .update(cx, |codegen, cx| codegen.set_active(true, cx)); @@ -2467,6 +2470,8 @@ pub struct CodegenAlternative { active: bool, edits: Vec<(Range, String)>, line_operations: Vec, + request: Option, + elapsed_time: Option, } enum CodegenStatus { @@ -2538,6 +2543,8 @@ impl CodegenAlternative { edits: Vec::new(), line_operations: Vec::new(), range, + request: None, + elapsed_time: None, } } @@ -2634,6 +2641,7 @@ impl CodegenAlternative { async { Ok(stream::empty().boxed()) }.boxed_local() } else { let request = self.build_request(user_prompt, assistant_panel_context, cx)?; + self.request = Some(request.clone()); let chunks = cx .spawn(|_, cx| async move { model.stream_completion_text(request, &cx).await }); @@ -2707,6 +2715,7 @@ impl CodegenAlternative { stream: impl 'static + Future>>>, cx: &mut ModelContext, ) { + let start_time = Instant::now(); let snapshot = self.snapshot.clone(); let selected_text = snapshot .text_for_range(self.range.start..self.range.end) @@ -2923,6 +2932,8 @@ impl CodegenAlternative { }; let result = generate.await; + let elapsed_time = start_time.elapsed().as_secs_f64(); + codegen .update(&mut cx, |this, cx| { this.last_equal_ranges.clear(); @@ -2931,6 +2942,7 @@ impl CodegenAlternative { } else { this.status = CodegenStatus::Done; } + this.elapsed_time = Some(elapsed_time); cx.emit(CodegenEvent::Finished); cx.notify(); })