Combine zeta and zeta2 edit prediction providers (#43284)
We've realized that a lot of the logic within an `EditPredictionProvider` is not specific to a particular edit prediction model / service. Rather, it is just the generic state management required to perform edit predictions at all in Zed. We want to move to a setup where there's one "built-in" edit prediction provider in Zed, which can be pointed at different edit prediction models. The only logic that is different for different models is how we construct the prompt, send the request, and parse the output. This PR also changes the behavior of the staff-only `zeta2` feature flag so that in only gates your *ability* to use Zeta2, but you can still use your local settings file to choose between different edit prediction models/services: zeta1, zeta2, and sweep. This PR also makes zeta1's outcome reporting and prediction-rating features work with all prediction models, not just zeta1. To do: * [x] remove duplicated logic around sending cloud requests between zeta1 and zeta2 * [x] port the outcome reporting logic from zeta to zeta2. * [x] get the "rate completions" modal working with all EP models * [x] display edit prediction diff * [x] show edit history events * [x] remove the original `zeta` crate. Release Notes: - N/A --------- Co-authored-by: Agus Zubiaga <agus@zed.dev> Co-authored-by: Ben Kunkle <ben@zed.dev>
This commit is contained in:
co-authored by
Agus Zubiaga
Ben Kunkle
parent
17d7988ad4
commit
9122dd2d70
@@ -13,6 +13,7 @@ use crate::{
|
||||
},
|
||||
task_context::RunnableRange,
|
||||
text_diff::text_diff,
|
||||
unified_diff,
|
||||
};
|
||||
pub use crate::{
|
||||
Grammar, Language, LanguageRegistry,
|
||||
@@ -745,6 +746,33 @@ pub struct EditPreview {
|
||||
}
|
||||
|
||||
impl EditPreview {
|
||||
pub fn as_unified_diff(&self, edits: &[(Range<Anchor>, impl AsRef<str>)]) -> Option<String> {
|
||||
let (first, _) = edits.first()?;
|
||||
let (last, _) = edits.last()?;
|
||||
|
||||
let start = first.start.to_point(&self.old_snapshot);
|
||||
let old_end = last.end.to_point(&self.old_snapshot);
|
||||
let new_end = last
|
||||
.end
|
||||
.bias_right(&self.old_snapshot)
|
||||
.to_point(&self.applied_edits_snapshot);
|
||||
|
||||
let start = Point::new(start.row.saturating_sub(3), 0);
|
||||
let old_end = Point::new(old_end.row + 3, 0).min(self.old_snapshot.max_point());
|
||||
let new_end = Point::new(new_end.row + 3, 0).min(self.applied_edits_snapshot.max_point());
|
||||
|
||||
Some(unified_diff(
|
||||
&self
|
||||
.old_snapshot
|
||||
.text_for_range(start..old_end)
|
||||
.collect::<String>(),
|
||||
&self
|
||||
.applied_edits_snapshot
|
||||
.text_for_range(start..new_end)
|
||||
.collect::<String>(),
|
||||
))
|
||||
}
|
||||
|
||||
pub fn highlight_edits(
|
||||
&self,
|
||||
current_snapshot: &BufferSnapshot,
|
||||
@@ -758,6 +786,8 @@ impl EditPreview {
|
||||
|
||||
let mut highlighted_text = HighlightedTextBuilder::default();
|
||||
|
||||
let visible_range_in_preview_snapshot =
|
||||
visible_range_in_preview_snapshot.to_offset(&self.applied_edits_snapshot);
|
||||
let mut offset_in_preview_snapshot = visible_range_in_preview_snapshot.start;
|
||||
|
||||
let insertion_highlight_style = HighlightStyle {
|
||||
@@ -825,7 +855,19 @@ impl EditPreview {
|
||||
highlighted_text.build()
|
||||
}
|
||||
|
||||
fn compute_visible_range<T>(&self, edits: &[(Range<Anchor>, T)]) -> Option<Range<usize>> {
|
||||
pub fn build_result_buffer(&self, cx: &mut App) -> Entity<Buffer> {
|
||||
cx.new(|cx| {
|
||||
let mut buffer = Buffer::local_normalized(
|
||||
self.applied_edits_snapshot.as_rope().clone(),
|
||||
self.applied_edits_snapshot.line_ending(),
|
||||
cx,
|
||||
);
|
||||
buffer.set_language(self.syntax_snapshot.root_language(), cx);
|
||||
buffer
|
||||
})
|
||||
}
|
||||
|
||||
pub fn compute_visible_range<T>(&self, edits: &[(Range<Anchor>, T)]) -> Option<Range<Point>> {
|
||||
let (first, _) = edits.first()?;
|
||||
let (last, _) = edits.last()?;
|
||||
|
||||
@@ -842,7 +884,7 @@ impl EditPreview {
|
||||
let range = Point::new(start.row, 0)
|
||||
..Point::new(end.row, self.applied_edits_snapshot.line_len(end.row));
|
||||
|
||||
Some(range.to_offset(&self.applied_edits_snapshot))
|
||||
Some(range)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user