Acquire LLM token from Cloud instead of Collab for Edit Predictions (#35431)
This PR updates the Zed Edit Prediction provider to acquire the LLM token from Cloud instead of Collab to allow using Edit Predictions even when disconnected from or unable to connect to the Collab server. Release Notes: - N/A --------- Co-authored-by: Richard Feldman <oss@rtfeldman.com>
This commit is contained in:
parent
8e7f1899e1
commit
410348deb0
8 changed files with 211 additions and 125 deletions
|
@ -564,7 +564,7 @@ pub fn main() {
|
|||
snippet_provider::init(cx);
|
||||
inline_completion_registry::init(
|
||||
app_state.client.clone(),
|
||||
app_state.user_store.clone(),
|
||||
app_state.cloud_user_store.clone(),
|
||||
cx,
|
||||
);
|
||||
let prompt_builder = PromptBuilder::load(app_state.fs.clone(), stdout_is_a_pty(), cx);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use client::{Client, DisableAiSettings, UserStore};
|
||||
use client::{Client, CloudUserStore, DisableAiSettings};
|
||||
use collections::HashMap;
|
||||
use copilot::{Copilot, CopilotCompletionProvider};
|
||||
use editor::Editor;
|
||||
|
@ -13,12 +13,12 @@ use util::ResultExt;
|
|||
use workspace::Workspace;
|
||||
use zeta::{ProviderDataCollection, ZetaInlineCompletionProvider};
|
||||
|
||||
pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
||||
pub fn init(client: Arc<Client>, cloud_user_store: Entity<CloudUserStore>, cx: &mut App) {
|
||||
let editors: Rc<RefCell<HashMap<WeakEntity<Editor>, AnyWindowHandle>>> = Rc::default();
|
||||
cx.observe_new({
|
||||
let editors = editors.clone();
|
||||
let client = client.clone();
|
||||
let user_store = user_store.clone();
|
||||
let cloud_user_store = cloud_user_store.clone();
|
||||
move |editor: &mut Editor, window, cx: &mut Context<Editor>| {
|
||||
if !editor.mode().is_full() {
|
||||
return;
|
||||
|
@ -48,7 +48,7 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
|||
editor,
|
||||
provider,
|
||||
&client,
|
||||
user_store.clone(),
|
||||
cloud_user_store.clone(),
|
||||
window,
|
||||
cx,
|
||||
);
|
||||
|
@ -60,7 +60,7 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
|||
|
||||
let mut provider = all_language_settings(None, cx).edit_predictions.provider;
|
||||
cx.spawn({
|
||||
let user_store = user_store.clone();
|
||||
let cloud_user_store = cloud_user_store.clone();
|
||||
let editors = editors.clone();
|
||||
let client = client.clone();
|
||||
|
||||
|
@ -72,7 +72,7 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
|||
&editors,
|
||||
provider,
|
||||
&client,
|
||||
user_store.clone(),
|
||||
cloud_user_store.clone(),
|
||||
cx,
|
||||
);
|
||||
})
|
||||
|
@ -85,15 +85,12 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
|||
cx.observe_global::<SettingsStore>({
|
||||
let editors = editors.clone();
|
||||
let client = client.clone();
|
||||
let user_store = user_store.clone();
|
||||
let cloud_user_store = cloud_user_store.clone();
|
||||
move |cx| {
|
||||
let new_provider = all_language_settings(None, cx).edit_predictions.provider;
|
||||
|
||||
if new_provider != provider {
|
||||
let tos_accepted = user_store
|
||||
.read(cx)
|
||||
.current_user_has_accepted_terms()
|
||||
.unwrap_or(false);
|
||||
let tos_accepted = cloud_user_store.read(cx).has_accepted_tos();
|
||||
|
||||
telemetry::event!(
|
||||
"Edit Prediction Provider Changed",
|
||||
|
@ -107,7 +104,7 @@ pub fn init(client: Arc<Client>, user_store: Entity<UserStore>, cx: &mut App) {
|
|||
&editors,
|
||||
provider,
|
||||
&client,
|
||||
user_store.clone(),
|
||||
cloud_user_store.clone(),
|
||||
cx,
|
||||
);
|
||||
|
||||
|
@ -148,7 +145,7 @@ fn assign_edit_prediction_providers(
|
|||
editors: &Rc<RefCell<HashMap<WeakEntity<Editor>, AnyWindowHandle>>>,
|
||||
provider: EditPredictionProvider,
|
||||
client: &Arc<Client>,
|
||||
user_store: Entity<UserStore>,
|
||||
cloud_user_store: Entity<CloudUserStore>,
|
||||
cx: &mut App,
|
||||
) {
|
||||
for (editor, window) in editors.borrow().iter() {
|
||||
|
@ -158,7 +155,7 @@ fn assign_edit_prediction_providers(
|
|||
editor,
|
||||
provider,
|
||||
&client,
|
||||
user_store.clone(),
|
||||
cloud_user_store.clone(),
|
||||
window,
|
||||
cx,
|
||||
);
|
||||
|
@ -213,7 +210,7 @@ fn assign_edit_prediction_provider(
|
|||
editor: &mut Editor,
|
||||
provider: EditPredictionProvider,
|
||||
client: &Arc<Client>,
|
||||
user_store: Entity<UserStore>,
|
||||
cloud_user_store: Entity<CloudUserStore>,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Editor>,
|
||||
) {
|
||||
|
@ -244,7 +241,7 @@ fn assign_edit_prediction_provider(
|
|||
}
|
||||
}
|
||||
EditPredictionProvider::Zed => {
|
||||
if client.status().borrow().is_connected() {
|
||||
if cloud_user_store.read(cx).is_authenticated() {
|
||||
let mut worktree = None;
|
||||
|
||||
if let Some(buffer) = &singleton_buffer {
|
||||
|
@ -266,7 +263,7 @@ fn assign_edit_prediction_provider(
|
|||
.map(|workspace| workspace.downgrade());
|
||||
|
||||
let zeta =
|
||||
zeta::Zeta::register(workspace, worktree, client.clone(), user_store, cx);
|
||||
zeta::Zeta::register(workspace, worktree, client.clone(), cloud_user_store, cx);
|
||||
|
||||
if let Some(buffer) = &singleton_buffer {
|
||||
if buffer.read(cx).file().is_some() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue