From f1f99331a4ffa99fb3408cd2ee66e02491a94d5a Mon Sep 17 00:00:00 2001 From: Oleksiy Syvokon Date: Mon, 11 May 2026 12:10:05 +0300 Subject: [PATCH] ep: Generate request IDs on the client (#56386) This change lays the groundwork for canceling in-flight requests. Without it, we always wait for a request to complete, even when we already know its result won't be used. Release Notes: - N/A --- crates/cloud_llm_client/src/predict_edits_v3.rs | 1 + crates/edit_prediction/src/edit_prediction.rs | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/cloud_llm_client/src/predict_edits_v3.rs b/crates/cloud_llm_client/src/predict_edits_v3.rs index f934962848..ef21d593b9 100644 --- a/crates/cloud_llm_client/src/predict_edits_v3.rs +++ b/crates/cloud_llm_client/src/predict_edits_v3.rs @@ -5,6 +5,7 @@ use std::ops::Range; use strum::{AsRefStr, EnumString}; pub const PREDICT_EDITS_MODE_HEADER_NAME: &str = "X-Zed-Predict-Edits-Mode"; +pub const PREDICT_EDITS_REQUEST_ID_HEADER_NAME: &str = "X-Zed-Predict-Edits-Request-Id"; #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, AsRefStr, EnumString)] #[serde(rename_all = "snake_case")] diff --git a/crates/edit_prediction/src/edit_prediction.rs b/crates/edit_prediction/src/edit_prediction.rs index 7f835dfbdf..cc17ea3b93 100644 --- a/crates/edit_prediction/src/edit_prediction.rs +++ b/crates/edit_prediction/src/edit_prediction.rs @@ -3,8 +3,8 @@ use client::{Client, EditPredictionUsage, NeedsLlmTokenRefresh, UserStore, globa use cloud_api_client::LlmApiToken; use cloud_api_types::{OrganizationId, SubmitEditPredictionFeedbackBody}; use cloud_llm_client::predict_edits_v3::{ - PREDICT_EDITS_MODE_HEADER_NAME, PredictEditsMode, PredictEditsV3Request, - PredictEditsV3Response, RawCompletionRequest, RawCompletionResponse, + PREDICT_EDITS_MODE_HEADER_NAME, PREDICT_EDITS_REQUEST_ID_HEADER_NAME, PredictEditsMode, + PredictEditsV3Request, PredictEditsV3Response, RawCompletionRequest, RawCompletionResponse, }; use cloud_llm_client::{ EditPredictionRejectReason, EditPredictionRejection, @@ -2601,6 +2601,7 @@ impl EditPredictionStore { .build_zed_llm_url("/predict_edits/v3", &[])?; let request = PredictEditsV3Request { input, trigger }; + let request_id = uuid::Uuid::new_v4().to_string(); let json_bytes = serde_json::to_vec(&request)?; let compressed = zstd::encode_all(&json_bytes[..], 3)?; @@ -2610,7 +2611,8 @@ impl EditPredictionStore { let builder = builder .uri(url.as_ref()) .header("Content-Encoding", "zstd") - .header(PREDICT_EDITS_MODE_HEADER_NAME, mode.as_ref()); + .header(PREDICT_EDITS_MODE_HEADER_NAME, mode.as_ref()) + .header(PREDICT_EDITS_REQUEST_ID_HEADER_NAME, request_id.as_str()); let builder = if let Some(preferred_experiment) = preferred_experiment.as_deref() { builder.header(PREFERRED_EXPERIMENT_HEADER_NAME, preferred_experiment) } else {