From 2332f824421875ce6db4c24a27f5df4755cce3a5 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Tue, 29 Aug 2023 14:41:02 +0200 Subject: [PATCH] More polish --- crates/ai/src/assistant.rs | 61 ++++++++++++++++++++---------- styles/src/style_tree/assistant.ts | 1 + 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/crates/ai/src/assistant.rs b/crates/ai/src/assistant.rs index ae223fdb57516752e137133f81481f42234f6dfa..62ff7212bf8f969337ec1519bb49e93aa2e3b351 100644 --- a/crates/ai/src/assistant.rs +++ b/crates/ai/src/assistant.rs @@ -567,24 +567,37 @@ impl AssistantPanel { } } - let language_name = snapshot - .language_at(range.start) - .map(|language| language.name()); - let language_name = language_name.as_deref().unwrap_or(""); + let language = snapshot.language_at(range.start); + let language_name = if let Some(language) = language.as_ref() { + if Arc::ptr_eq(language, &language::PLAIN_TEXT) { + None + } else { + Some(language.name()) + } + } else { + None + }; + let language_name = language_name.as_deref(); let model = settings::get::(cx) .default_open_ai_model .clone(); let mut prompt = String::new(); - writeln!(prompt, "You're an expert {language_name} engineer.").unwrap(); + if let Some(language_name) = language_name { + writeln!(prompt, "You're an expert {language_name} engineer.").unwrap(); + } match pending_assist.kind { InlineAssistKind::Transform => { writeln!( prompt, - "You're currently working inside an editor on this code:" + "You're currently working inside an editor on this file:" ) .unwrap(); - writeln!(prompt, "```{language_name}").unwrap(); + if let Some(language_name) = language_name { + writeln!(prompt, "```{language_name}").unwrap(); + } else { + writeln!(prompt, "```").unwrap(); + } for chunk in snapshot.text_for_range(Anchor::min()..Anchor::max()) { write!(prompt, "{chunk}").unwrap(); } @@ -592,31 +605,39 @@ impl AssistantPanel { writeln!( prompt, - "In particular, the user has selected the following code:" + "In particular, the user has selected the following text:" ) .unwrap(); - writeln!(prompt, "```{language_name}").unwrap(); + if let Some(language_name) = language_name { + writeln!(prompt, "```{language_name}").unwrap(); + } else { + writeln!(prompt, "```").unwrap(); + } writeln!(prompt, "{normalized_selected_text}").unwrap(); writeln!(prompt, "```").unwrap(); writeln!(prompt).unwrap(); writeln!( prompt, - "Modify the selected code given the user prompt: {user_prompt}" + "Modify the selected text given the user prompt: {user_prompt}" ) .unwrap(); writeln!( prompt, - "You MUST reply only with the edited selected code, not the entire file." + "You MUST reply only with the edited selected text, not the entire file." ) .unwrap(); } InlineAssistKind::Generate => { writeln!( prompt, - "You're currently working inside an editor on this code:" + "You're currently working inside an editor on this file:" ) .unwrap(); - writeln!(prompt, "```{language_name}").unwrap(); + if let Some(language_name) = language_name { + writeln!(prompt, "```{language_name}").unwrap(); + } else { + writeln!(prompt, "```").unwrap(); + } for chunk in snapshot.text_for_range(Anchor::min()..range.start) { write!(prompt, "{chunk}").unwrap(); } @@ -633,23 +654,21 @@ impl AssistantPanel { .unwrap(); writeln!( prompt, - "Code can't be replaced, so assume your answer will be inserted at the cursor." + "Text can't be replaced, so assume your answer will be inserted at the cursor." ) .unwrap(); writeln!( prompt, - "Complete the code given the user prompt: {user_prompt}" + "Complete the text given the user prompt: {user_prompt}" ) .unwrap(); } } - writeln!(prompt, "Your answer MUST always be valid {language_name}.").unwrap(); + if let Some(language_name) = language_name { + writeln!(prompt, "Your answer MUST always be valid {language_name}.").unwrap(); + } writeln!(prompt, "Always wrap your response in a Markdown codeblock.").unwrap(); - writeln!( - prompt, - "Never make remarks about the output, always output just code." - ) - .unwrap(); + writeln!(prompt, "Never make remarks about the output.").unwrap(); let mut request = OpenAIRequest { model: model.full_name().into(), diff --git a/styles/src/style_tree/assistant.ts b/styles/src/style_tree/assistant.ts index e660bf078f299fbdb6926e70a35b4eef0cb60a3d..4a33ef9b19cffac5d8899c2aefd53b570e94cefa 100644 --- a/styles/src/style_tree/assistant.ts +++ b/styles/src/style_tree/assistant.ts @@ -60,6 +60,7 @@ export default function assistant(): any { padding: { left: 12 }, }, inline: { + background: background(theme.highest), margin: { top: 3, bottom: 3 }, border: border(theme.lowest, "on", { top: true,