update inline generate prompt to leverage more explicit <|START| and |END|> spans

This commit is contained in:
KCaverly 2023-09-26 17:10:31 -04:00
parent 54c63063e4
commit e8dd412ac1
2 changed files with 15 additions and 15 deletions

View file

@ -544,16 +544,10 @@ impl AssistantPanel {
let multi_buffer = editor.read(cx).buffer().read(cx); let multi_buffer = editor.read(cx).buffer().read(cx);
let multi_buffer_snapshot = multi_buffer.snapshot(cx); let multi_buffer_snapshot = multi_buffer.snapshot(cx);
let snapshot = if multi_buffer.all_buffers().len() > 1 { let snapshot = if multi_buffer.is_singleton() {
return; multi_buffer.as_singleton().unwrap().read(cx).snapshot()
} else { } else {
multi_buffer return;
.all_buffers()
.iter()
.next()
.unwrap()
.read(cx)
.snapshot()
}; };
let range = pending_assist.codegen.read(cx).range(); let range = pending_assist.codegen.read(cx).range();
@ -588,6 +582,8 @@ impl AssistantPanel {
codegen_kind, codegen_kind,
); );
dbg!(&prompt);
let mut messages = Vec::new(); let mut messages = Vec::new();
let mut model = settings::get::<AssistantSettings>(cx) let mut model = settings::get::<AssistantSettings>(cx)
.default_open_ai_model .default_open_ai_model

View file

@ -68,9 +68,13 @@ fn outline_for_prompt(
intersected = false; intersected = false;
text.extend(iter::repeat(indent.as_str()).take(intersection_indent)); text.extend(iter::repeat(indent.as_str()).take(intersection_indent));
text.extend(buffer.text_for_range(extended_range.start..range.start)); text.extend(buffer.text_for_range(extended_range.start..range.start));
text.push_str("<|"); text.push_str("<|START|");
text.extend(buffer.text_for_range(range.clone())); text.extend(buffer.text_for_range(range.clone()));
text.push_str("|>"); if range.start != range.end {
text.push_str("|END|>");
} else {
text.push_str(">");
}
text.extend(buffer.text_for_range(range.end..extended_range.end)); text.extend(buffer.text_for_range(range.end..extended_range.end));
text.push('\n'); text.push('\n');
} }
@ -113,16 +117,16 @@ pub fn generate_content_prompt(
// Assume for now that we are just generating // Assume for now that we are just generating
if range.clone().start == range.end { if range.clone().start == range.end {
writeln!(prompt, "In particular, the user's cursor is current on the '<||>' span in the above outline, with no text selected.").unwrap(); writeln!(prompt, "In particular, the user's cursor is current on the '<|START|>' span in the above outline, with no text selected.").unwrap();
} else { } else {
writeln!(prompt, "In particular, the user has selected a section of the text between the '<|' and '|>' spans.").unwrap(); writeln!(prompt, "In particular, the user has selected a section of the text between the '<|START|' and '|END|>' spans.").unwrap();
} }
match kind { match kind {
CodegenKind::Generate { position } => { CodegenKind::Generate { position } => {
writeln!( writeln!(
prompt, prompt,
"Assume the cursor is located where the `<|` marker is." "Assume the cursor is located where the `<|START|` marker is."
) )
.unwrap(); .unwrap();
writeln!( writeln!(
@ -144,7 +148,7 @@ pub fn generate_content_prompt(
.unwrap(); .unwrap();
writeln!( writeln!(
prompt, prompt,
"You MUST reply with only the adjusted code, not the entire file." "You MUST reply with only the adjusted code (within the '<|START|' and '|END|>' spans), not the entire file."
) )
.unwrap(); .unwrap();
} }