zeta2 cli: Output raw request (#38876)

Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
This commit is contained in:
Agus Zubiaga
2025-09-25 12:59:17 +00:00
committed by GitHub
co-authored by Bennet Bo Fenner Oleksiy Syvokon
parent c627543b46
commit f25ace6be0
+38 -13
View File
@@ -2,7 +2,7 @@ mod headless;
use anyhow::{Result, anyhow};
use clap::{Args, Parser, Subcommand};
use cloud_llm_client::predict_edits_v3::PromptFormat;
use cloud_llm_client::predict_edits_v3;
use edit_prediction_context::EditPredictionExcerptOptions;
use futures::channel::mpsc;
use futures::{FutureExt as _, StreamExt as _};
@@ -75,18 +75,35 @@ struct Zeta2Args {
target_before_cursor_over_total_bytes: f32,
#[arg(long, default_value_t = 1024)]
max_diagnostic_bytes: usize,
#[arg(long, value_parser = parse_format)]
format: PromptFormat,
#[arg(long, value_enum, default_value_t = PromptFormat::default())]
prompt_format: PromptFormat,
#[arg(long, value_enum, default_value_t = Default::default())]
output_format: OutputFormat,
}
fn parse_format(s: &str) -> Result<PromptFormat> {
match s {
"marked_excerpt" => Ok(PromptFormat::MarkedExcerpt),
"labeled_sections" => Ok(PromptFormat::LabeledSections),
_ => Err(anyhow!("Invalid format: {}", s)),
#[derive(clap::ValueEnum, Default, Debug, Clone)]
enum PromptFormat {
#[default]
MarkedExcerpt,
LabeledSections,
}
impl Into<predict_edits_v3::PromptFormat> for PromptFormat {
fn into(self) -> predict_edits_v3::PromptFormat {
match self {
Self::MarkedExcerpt => predict_edits_v3::PromptFormat::MarkedExcerpt,
Self::LabeledSections => predict_edits_v3::PromptFormat::LabeledSections,
}
}
}
#[derive(clap::ValueEnum, Default, Debug, Clone)]
enum OutputFormat {
#[default]
Prompt,
Request,
}
#[derive(Debug, Clone)]
enum FileOrStdin {
File(PathBuf),
@@ -239,7 +256,7 @@ async fn get_context(
},
max_diagnostic_bytes: zeta2_args.max_diagnostic_bytes,
max_prompt_bytes: zeta2_args.max_prompt_bytes,
prompt_format: zeta2_args.format,
prompt_format: zeta2_args.prompt_format.into(),
})
});
// TODO: Actually wait for indexing.
@@ -252,9 +269,17 @@ async fn get_context(
zeta.cloud_request_for_zeta_cli(&project, &buffer, cursor, cx)
})?
.await?;
let planned_prompt = cloud_zeta2_prompt::PlannedPrompt::populate(&request)?;
// TODO: Output the section label ranges
anyhow::Ok(planned_prompt.to_prompt_string()?.0)
match zeta2_args.output_format {
OutputFormat::Prompt => {
let planned_prompt =
cloud_zeta2_prompt::PlannedPrompt::populate(&request)?;
// TODO: Output the section label ranges
anyhow::Ok(planned_prompt.to_prompt_string()?.0)
}
OutputFormat::Request => {
anyhow::Ok(serde_json::to_string_pretty(&request)?)
}
}
})
})?
.await?,
@@ -469,7 +494,7 @@ fn main() {
println!("{}", output);
// TODO: Remove this once the 5 second delay is properly replaced.
if is_zeta2_context_command {
eprintln!("Note that zeta2-context doesn't yet wait for indexing, instead waits 5 seconds.");
eprintln!("Note that zeta_cli doesn't yet wait for indexing, instead waits 5 seconds.");
}
let _ = cx.update(|cx| cx.quit());
}