AI edit: return only changes, not full document
- Edit prompt asks for APPEND/PREPEND/REPLACE + only new content - Frontend applies the edit surgically (append/prepend/replace) - Much faster: AI only generates the new text, not the whole doc - Chat mode still streams response progressively
This commit is contained in:
+14
-3
@@ -1038,9 +1038,7 @@ async function sendAiChat() {
|
|||||||
try {
|
try {
|
||||||
const token_text = JSON.parse(data)
|
const token_text = JSON.parse(data)
|
||||||
fullText += token_text
|
fullText += token_text
|
||||||
if (action === 'edit') {
|
if (action !== 'edit') {
|
||||||
content.value = fullText
|
|
||||||
} else {
|
|
||||||
aiChatResponse.value = fullText
|
aiChatResponse.value = fullText
|
||||||
}
|
}
|
||||||
} catch {}
|
} catch {}
|
||||||
@@ -1048,6 +1046,19 @@ async function sendAiChat() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (action === 'edit') {
|
if (action === 'edit') {
|
||||||
|
// Parse location hint from AI response
|
||||||
|
const firstNewline = fullText.indexOf('\n')
|
||||||
|
const hint = firstNewline > -1 ? fullText.substring(0, firstNewline).trim().toUpperCase() : ''
|
||||||
|
const editContent = firstNewline > -1 ? fullText.substring(firstNewline + 1) : fullText
|
||||||
|
|
||||||
|
if (hint === 'APPEND') {
|
||||||
|
content.value = content.value.trimEnd() + '\n\n' + editContent
|
||||||
|
} else if (hint === 'PREPEND') {
|
||||||
|
content.value = editContent + '\n\n' + content.value
|
||||||
|
} else {
|
||||||
|
// REPLACE or unknown — replace entire document
|
||||||
|
content.value = hint === 'REPLACE' ? editContent : fullText
|
||||||
|
}
|
||||||
isDirty.value = true
|
isDirty.value = true
|
||||||
aiChatResponse.value = 'Document updated.'
|
aiChatResponse.value = 'Document updated.'
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -158,8 +158,11 @@ func (s *Server) handleAIChat(w http.ResponseWriter, r *http.Request) {
|
|||||||
var systemPrompt, userMsg string
|
var systemPrompt, userMsg string
|
||||||
if req.Mode == "edit" {
|
if req.Mode == "edit" {
|
||||||
systemPrompt = "You are a document editor. The user will give you a markdown document and an instruction. " +
|
systemPrompt = "You are a document editor. The user will give you a markdown document and an instruction. " +
|
||||||
"Apply the instruction and return the COMPLETE updated document. " +
|
"Return ONLY the new or changed text that should be inserted/replaced. " +
|
||||||
"Do not add explanations or wrap in code fences. Return raw markdown only."
|
"Do not return the entire document. Do not add explanations or wrap in code fences. " +
|
||||||
|
"If adding content, return only the addition. If modifying, return only the modified section. " +
|
||||||
|
"Start your response with a location hint on the first line: APPEND (add to end), PREPEND (add to start), or REPLACE (replace entire document). " +
|
||||||
|
"Then the content on the next line."
|
||||||
userMsg = "Document:\n\n" + req.Content + "\n\nInstruction: " + req.Message
|
userMsg = "Document:\n\n" + req.Content + "\n\nInstruction: " + req.Message
|
||||||
} else {
|
} else {
|
||||||
systemPrompt = "You are a helpful writing assistant. The user has a markdown document open. Answer concisely in markdown."
|
systemPrompt = "You are a helpful writing assistant. The user has a markdown document open. Answer concisely in markdown."
|
||||||
|
|||||||
Reference in New Issue
Block a user