From 9891b0365607373553b5dab74494a5e81b01e3c2 Mon Sep 17 00:00:00 2001 From: yetone Date: Sun, 17 Nov 2024 03:49:02 +0800 Subject: [PATCH] fix(openai): user and assistant roles should be alternating (#859) --- lua/avante/providers/gemini.lua | 13 ++++++++----- lua/avante/providers/openai.lua | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lua/avante/providers/gemini.lua b/lua/avante/providers/gemini.lua index 8e477e6..3a42124 100644 --- a/lua/avante/providers/gemini.lua +++ b/lua/avante/providers/gemini.lua @@ -19,12 +19,15 @@ M.parse_messages = function(opts) vim.iter(opts.messages):each(function(message) local role = message.role if role == prev_role then - if role == "user" then - table.insert(contents, { role = "model", parts = { - { text = "Ok, I understand." }, - } }) + if role == M.role_map["user"] then + table.insert( + contents, + { role = M.role_map["assistant"], parts = { + { text = "Ok, I understand." }, + } } + ) else - table.insert(contents, { role = "user", parts = { + table.insert(contents, { role = M.role_map["user"], parts = { { text = "Ok" }, } }) end diff --git a/lua/avante/providers/openai.lua b/lua/avante/providers/openai.lua index 5011d0b..438d40f 100644 --- a/lua/avante/providers/openai.lua +++ b/lua/avante/providers/openai.lua @@ -85,7 +85,23 @@ M.parse_messages = function(opts) messages[#messages].content = message_content end - return messages + local final_messages = {} + local prev_role = nil + + vim.iter(messages):each(function(message) + local role = message.role + if role == prev_role then + if role == M.role_map["user"] then + table.insert(final_messages, { role = M.role_map["assistant"], content = "Ok, I understand." }) + else + table.insert(final_messages, { role = M.role_map["user"], content = "Ok" }) + end + end + prev_role = role + table.insert(final_messages, { role = M.role_map[role] or role, content = message.content }) + end) + + return final_messages end M.parse_response = function(data_stream, _, opts)