Release Notes: - N/A --------- Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
90 lines
2.8 KiB
Rust
90 lines
2.8 KiB
Rust
use std::str::FromStr;
|
|
|
|
use crate::inline_assistant::test::run_inline_assistant_test;
|
|
|
|
use eval_utils::{EvalOutput, NoProcessor};
|
|
use gpui::TestAppContext;
|
|
use language_model::{LanguageModelRegistry, SelectedModel};
|
|
use rand::{SeedableRng as _, rngs::StdRng};
|
|
|
|
#[test]
|
|
#[cfg_attr(not(feature = "unit-eval"), ignore)]
|
|
fn eval_single_cursor_edit() {
|
|
eval_utils::eval(20, 1.0, NoProcessor, move || {
|
|
run_eval(
|
|
&EvalInput {
|
|
prompt: "Rename this variable to buffer_text".to_string(),
|
|
buffer: indoc::indoc! {"
|
|
struct EvalExampleStruct {
|
|
text: Strˇing,
|
|
prompt: String,
|
|
}
|
|
"}
|
|
.to_string(),
|
|
},
|
|
&|_, output| {
|
|
let expected = indoc::indoc! {"
|
|
struct EvalExampleStruct {
|
|
buffer_text: String,
|
|
prompt: String,
|
|
}
|
|
"};
|
|
if output == expected {
|
|
EvalOutput {
|
|
outcome: eval_utils::OutcomeKind::Passed,
|
|
data: "Passed!".to_string(),
|
|
metadata: (),
|
|
}
|
|
} else {
|
|
EvalOutput {
|
|
outcome: eval_utils::OutcomeKind::Failed,
|
|
data: format!("Failed to rename variable, output: {}", output),
|
|
metadata: (),
|
|
}
|
|
}
|
|
},
|
|
)
|
|
});
|
|
}
|
|
|
|
struct EvalInput {
|
|
buffer: String,
|
|
prompt: String,
|
|
}
|
|
|
|
fn run_eval(
|
|
input: &EvalInput,
|
|
judge: &dyn Fn(&EvalInput, &str) -> eval_utils::EvalOutput<()>,
|
|
) -> eval_utils::EvalOutput<()> {
|
|
let dispatcher = gpui::TestDispatcher::new(StdRng::from_os_rng());
|
|
let mut cx = TestAppContext::build(dispatcher, None);
|
|
cx.skip_drawing();
|
|
|
|
let buffer_text = run_inline_assistant_test(
|
|
input.buffer.clone(),
|
|
input.prompt.clone(),
|
|
|cx| {
|
|
// Reconfigure to use a real model instead of the fake one
|
|
let model_name = std::env::var("ZED_AGENT_MODEL")
|
|
.unwrap_or("anthropic/claude-sonnet-4-latest".into());
|
|
|
|
let selected_model = SelectedModel::from_str(&model_name)
|
|
.expect("Invalid model format. Use 'provider/model-id'");
|
|
|
|
log::info!("Selected model: {selected_model:?}");
|
|
|
|
cx.update(|_, cx| {
|
|
LanguageModelRegistry::global(cx).update(cx, |registry, cx| {
|
|
registry.select_inline_assistant_model(Some(&selected_model), cx);
|
|
});
|
|
});
|
|
},
|
|
|_cx| {
|
|
log::info!("Waiting for actual response from the LLM...");
|
|
},
|
|
&mut cx,
|
|
);
|
|
|
|
judge(input, &buffer_text)
|
|
}
|