Reorganize edit prediction code and remove old experiments (#44187)

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:
Max Brunsfeld
2025-12-04 15:56:57 -08:00
committed by GitHub
co-authored by Agus Zubiaga Ben Kunkle
parent 76167109db
commit 42583c1141
113 changed files with 5598 additions and 15080 deletions
+2 -2
View File
@@ -581,7 +581,7 @@ pub fn main() {
language_model::init(app_state.client.clone(), cx);
language_models::init(app_state.user_store.clone(), app_state.client.clone(), cx);
acp_tools::init(cx);
zeta2_tools::init(cx);
edit_prediction_ui::init(cx);
web_search::init(cx);
web_search_providers::init(app_state.client.clone(), cx);
snippet_provider::init(cx);
@@ -640,7 +640,7 @@ pub fn main() {
settings_ui::init(cx);
keymap_editor::init(cx);
extensions_ui::init(cx);
zeta::init(cx);
edit_prediction::init(cx);
inspector_ui::init(app_state.clone(), cx);
json_schema_store::init(cx);
miniprofiler_ui::init(*STARTUP_TIME.get().unwrap(), cx);
+4 -4
View File
@@ -401,8 +401,8 @@ pub fn initialize_workspace(
unstable_version_notification(cx);
let edit_prediction_menu_handle = PopoverMenuHandle::default();
let edit_prediction_button = cx.new(|cx| {
edit_prediction_button::EditPredictionButton::new(
let edit_prediction_ui = cx.new(|cx| {
edit_prediction_ui::EditPredictionButton::new(
app_state.fs.clone(),
app_state.user_store.clone(),
edit_prediction_menu_handle.clone(),
@@ -411,7 +411,7 @@ pub fn initialize_workspace(
)
});
workspace.register_action({
move |_, _: &edit_prediction_button::ToggleMenu, window, cx| {
move |_, _: &edit_prediction_ui::ToggleMenu, window, cx| {
edit_prediction_menu_handle.toggle(window, cx);
}
});
@@ -450,7 +450,7 @@ pub fn initialize_workspace(
status_bar.add_left_item(lsp_button, window, cx);
status_bar.add_left_item(diagnostic_summary, window, cx);
status_bar.add_left_item(activity_indicator, window, cx);
status_bar.add_right_item(edit_prediction_button, window, cx);
status_bar.add_right_item(edit_prediction_ui, window, cx);
status_bar.add_right_item(active_buffer_language, window, cx);
status_bar.add_right_item(active_toolchain_language, window, cx);
status_bar.add_right_item(line_ending_indicator, window, cx);
+26 -20
View File
@@ -1,7 +1,8 @@
use client::{Client, UserStore};
use codestral::CodestralCompletionProvider;
use codestral::CodestralEditPredictionDelegate;
use collections::HashMap;
use copilot::{Copilot, CopilotCompletionProvider};
use copilot::{Copilot, CopilotEditPredictionDelegate};
use edit_prediction::{SweepFeatureFlag, ZedEditPredictionDelegate, Zeta2FeatureFlag};
use editor::Editor;
use feature_flags::FeatureFlagAppExt;
use gpui::{AnyWindowHandle, App, AppContext as _, Context, Entity, WeakEntity};
@@ -12,9 +13,8 @@ use settings::{
EXPERIMENTAL_ZETA2_EDIT_PREDICTION_PROVIDER_NAME, SettingsStore,
};
use std::{cell::RefCell, rc::Rc, sync::Arc};
use supermaven::{Supermaven, SupermavenCompletionProvider};
use supermaven::{Supermaven, SupermavenEditPredictionDelegate};
use ui::Window;
use zeta::{SweepFeatureFlag, Zeta2FeatureFlag, ZetaEditPredictionProvider};
pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
let editors: Rc<RefCell<HashMap<WeakEntity<Editor>, AnyWindowHandle>>> = Rc::default();
@@ -59,7 +59,7 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
})
.detach();
cx.on_action(clear_zeta_edit_history);
cx.on_action(clear_edit_prediction_store_edit_history);
let mut provider = all_language_settings(None, cx).edit_predictions.provider;
cx.subscribe(&user_store, {
@@ -100,9 +100,9 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
.detach();
}
fn clear_zeta_edit_history(_: &zeta::ClearHistory, cx: &mut App) {
if let Some(zeta) = zeta::Zeta::try_global(cx) {
zeta.update(cx, |zeta, _| zeta.clear_history());
fn clear_edit_prediction_store_edit_history(_: &edit_prediction::ClearHistory, cx: &mut App) {
if let Some(ep_store) = edit_prediction::EditPredictionStore::try_global(cx) {
ep_store.update(cx, |ep_store, _| ep_store.clear_history());
}
}
@@ -176,7 +176,7 @@ fn assign_edit_prediction_provider(
match provider {
EditPredictionProvider::None => {
editor.set_edit_prediction_provider::<ZetaEditPredictionProvider>(None, window, cx);
editor.set_edit_prediction_provider::<ZedEditPredictionDelegate>(None, window, cx);
}
EditPredictionProvider::Copilot => {
if let Some(copilot) = Copilot::global(cx) {
@@ -187,55 +187,61 @@ fn assign_edit_prediction_provider(
copilot.register_buffer(&buffer, cx);
});
}
let provider = cx.new(|_| CopilotCompletionProvider::new(copilot));
let provider = cx.new(|_| CopilotEditPredictionDelegate::new(copilot));
editor.set_edit_prediction_provider(Some(provider), window, cx);
}
}
EditPredictionProvider::Supermaven => {
if let Some(supermaven) = Supermaven::global(cx) {
let provider = cx.new(|_| SupermavenCompletionProvider::new(supermaven));
let provider = cx.new(|_| SupermavenEditPredictionDelegate::new(supermaven));
editor.set_edit_prediction_provider(Some(provider), window, cx);
}
}
EditPredictionProvider::Codestral => {
let http_client = client.http_client();
let provider = cx.new(|_| CodestralCompletionProvider::new(http_client));
let provider = cx.new(|_| CodestralEditPredictionDelegate::new(http_client));
editor.set_edit_prediction_provider(Some(provider), window, cx);
}
value @ (EditPredictionProvider::Experimental(_) | EditPredictionProvider::Zed) => {
let zeta = zeta::Zeta::global(client, &user_store, cx);
let ep_store = edit_prediction::EditPredictionStore::global(client, &user_store, cx);
if let Some(project) = editor.project()
&& let Some(buffer) = &singleton_buffer
&& buffer.read(cx).file().is_some()
{
let has_model = zeta.update(cx, |zeta, cx| {
let has_model = ep_store.update(cx, |ep_store, cx| {
let model = if let EditPredictionProvider::Experimental(name) = value {
if name == EXPERIMENTAL_SWEEP_EDIT_PREDICTION_PROVIDER_NAME
&& cx.has_flag::<SweepFeatureFlag>()
{
zeta::ZetaEditPredictionModel::Sweep
edit_prediction::EditPredictionModel::Sweep
} else if name == EXPERIMENTAL_ZETA2_EDIT_PREDICTION_PROVIDER_NAME
&& cx.has_flag::<Zeta2FeatureFlag>()
{
zeta::ZetaEditPredictionModel::Zeta2
edit_prediction::EditPredictionModel::Zeta2
} else {
return false;
}
} else if user_store.read(cx).current_user().is_some() {
zeta::ZetaEditPredictionModel::Zeta1
edit_prediction::EditPredictionModel::Zeta1
} else {
return false;
};
zeta.set_edit_prediction_model(model);
zeta.register_buffer(buffer, project, cx);
ep_store.set_edit_prediction_model(model);
ep_store.register_buffer(buffer, project, cx);
true
});
if has_model {
let provider = cx.new(|cx| {
ZetaEditPredictionProvider::new(project.clone(), &client, &user_store, cx)
ZedEditPredictionDelegate::new(
project.clone(),
singleton_buffer,
&client,
&user_store,
cx,
)
});
editor.set_edit_prediction_provider(Some(provider), window, cx);
}