From d5ed569fad878c838753c2ad11f868afc0eaa893 Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Mon, 11 Aug 2025 15:33:16 +0300 Subject: [PATCH] zeta: Reduce request payload (#35968) 1. Don't send diagnostics if there are more than 10 of them. This fixes an issue with sending 100kb requests for projects with many warnings. 2. Don't send speculated_output and outline, as those are currently unused. Release Notes: - Improved edit prediction latency --- crates/zeta/src/input_excerpt.rs | 9 ------- crates/zeta/src/zeta.rs | 41 +++++--------------------------- 2 files changed, 6 insertions(+), 44 deletions(-) diff --git a/crates/zeta/src/input_excerpt.rs b/crates/zeta/src/input_excerpt.rs index 5949e713e9..8ca6d39407 100644 --- a/crates/zeta/src/input_excerpt.rs +++ b/crates/zeta/src/input_excerpt.rs @@ -9,7 +9,6 @@ use std::{fmt::Write, ops::Range}; pub struct InputExcerpt { pub editable_range: Range, pub prompt: String, - pub speculated_output: String, } pub fn excerpt_for_cursor_position( @@ -46,7 +45,6 @@ pub fn excerpt_for_cursor_position( let context_range = expand_range(snapshot, editable_range.clone(), context_token_limit); let mut prompt = String::new(); - let mut speculated_output = String::new(); writeln!(&mut prompt, "```{path}").unwrap(); if context_range.start == Point::zero() { @@ -58,12 +56,6 @@ pub fn excerpt_for_cursor_position( } push_editable_range(position, snapshot, editable_range.clone(), &mut prompt); - push_editable_range( - position, - snapshot, - editable_range.clone(), - &mut speculated_output, - ); for chunk in snapshot.chunks(editable_range.end..context_range.end, false) { prompt.push_str(chunk.text); @@ -73,7 +65,6 @@ pub fn excerpt_for_cursor_position( InputExcerpt { editable_range, prompt, - speculated_output, } } diff --git a/crates/zeta/src/zeta.rs b/crates/zeta/src/zeta.rs index 1ddbd25cb8..6900082003 100644 --- a/crates/zeta/src/zeta.rs +++ b/crates/zeta/src/zeta.rs @@ -37,7 +37,6 @@ use release_channel::AppVersion; use settings::WorktreeId; use std::str::FromStr; use std::{ - borrow::Cow, cmp, fmt::Write, future::Future, @@ -66,6 +65,7 @@ const ZED_PREDICT_DATA_COLLECTION_CHOICE: &str = "zed_predict_data_collection_ch const MAX_CONTEXT_TOKENS: usize = 150; const MAX_REWRITE_TOKENS: usize = 350; const MAX_EVENT_TOKENS: usize = 500; +const MAX_DIAGNOSTIC_GROUPS: usize = 10; /// Maximum number of events to track. const MAX_EVENT_COUNT: usize = 16; @@ -1175,7 +1175,9 @@ pub fn gather_context( cx.background_spawn({ let snapshot = snapshot.clone(); async move { - let diagnostic_groups = if diagnostic_groups.is_empty() { + let diagnostic_groups = if diagnostic_groups.is_empty() + || diagnostic_groups.len() >= MAX_DIAGNOSTIC_GROUPS + { None } else { Some(diagnostic_groups) @@ -1189,21 +1191,16 @@ pub fn gather_context( MAX_CONTEXT_TOKENS, ); let input_events = make_events_prompt(); - let input_outline = if can_collect_data { - prompt_for_outline(&snapshot) - } else { - String::new() - }; let editable_range = input_excerpt.editable_range.to_offset(&snapshot); let body = PredictEditsBody { input_events, input_excerpt: input_excerpt.prompt, - speculated_output: Some(input_excerpt.speculated_output), - outline: Some(input_outline), can_collect_data, diagnostic_groups, git_info, + outline: None, + speculated_output: None, }; Ok(GatherContextOutput { @@ -1214,32 +1211,6 @@ pub fn gather_context( }) } -fn prompt_for_outline(snapshot: &BufferSnapshot) -> String { - let mut input_outline = String::new(); - - writeln!( - input_outline, - "```{}", - snapshot - .file() - .map_or(Cow::Borrowed("untitled"), |file| file - .path() - .to_string_lossy()) - ) - .unwrap(); - - if let Some(outline) = snapshot.outline(None) { - for item in &outline.items { - let spacing = " ".repeat(item.depth); - writeln!(input_outline, "{}{}", spacing, item.text).unwrap(); - } - } - - writeln!(input_outline, "```").unwrap(); - - input_outline -} - fn prompt_for_events(events: &VecDeque, mut remaining_tokens: usize) -> String { let mut result = String::new(); for event in events.iter().rev() {