Skip to content

Commit 7be6ba0

Browse files
committed
fix: handle chat text before first user prefix
(for easier use in .md buffers from obsidian and such)
1 parent 91add37 commit 7be6ba0

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

lua/gp/init.lua

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -861,16 +861,19 @@ M.chat_respond = function(params)
861861

862862
-- message needs role and content
863863
local messages = {}
864-
local role = ""
864+
local role = "user"
865865
local content = ""
866866

867867
-- iterate over lines
868-
local start_index = header_end + 1
868+
local start_index = header_end + 2
869869
local end_index = #lines
870870
if params.range == 2 then
871871
start_index = math.max(start_index, params.line1)
872872
end_index = math.min(end_index, params.line2)
873873
end
874+
if start_index > end_index then
875+
start_index = end_index
876+
end
874877

875878
local agent = M.get_chat_agent()
876879
local agent_name = agent.name
@@ -924,14 +927,13 @@ M.chat_respond = function(params)
924927
table.insert(messages, { role = role, content = content })
925928
role = "assistant"
926929
content = ""
927-
elseif role ~= "" then
930+
else
928931
content = content .. "\n" .. line
929932
end
930933
end
931934
-- insert last message not handled in loop
932935
table.insert(messages, { role = role, content = content })
933936

934-
-- replace first empty message with system prompt
935937
content = ""
936938
if headers.role and headers.role:match("%S") then
937939
content = headers.role
@@ -941,14 +943,20 @@ M.chat_respond = function(params)
941943
if content:match("%S") then
942944
-- make it multiline again if it contains escaped newlines
943945
content = content:gsub("\\n", "\n")
944-
messages[1] = { role = "system", content = content }
946+
table.insert(messages, 1, { role = "system", content = content })
945947
end
946948

947949
-- strip whitespace from ends of content
948950
for _, message in ipairs(messages) do
949951
message.content = message.content:gsub("^%s*(.-)%s*$", "%1")
950952
end
951953

954+
messages = vim.tbl_filter(function(message)
955+
return not (message.content == "" and message.role == "user")
956+
end, messages)
957+
958+
M.logger.debug("messages: " .. vim.inspect(messages), true)
959+
952960
-- write assistant prompt
953961
local last_content_line = M.helpers.last_content_line(buf)
954962
vim.api.nvim_buf_set_lines(buf, last_content_line, last_content_line, false, { "", agent_prefix .. agent_suffix, "" })

0 commit comments

Comments
 (0)