From e1d2d825e28d7c038685b018563a9550a9eb5085 Mon Sep 17 00:00:00 2001 From: brook hong Date: Tue, 4 Mar 2025 23:47:28 +0800 Subject: [PATCH] fix: handle bedrock exceptions (#1483) --- lua/avante/llm.lua | 2 +- lua/avante/providers/bedrock.lua | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lua/avante/llm.lua b/lua/avante/llm.lua index fb34e76..662531d 100644 --- a/lua/avante/llm.lua +++ b/lua/avante/llm.lua @@ -357,7 +357,7 @@ function M._stream(opts) end -- If stream is not enabled, then handle the response here - if spec.body.stream == false and result.status == 200 then + if (spec.body.stream == nil or spec.body.stream == false) and result.status == 200 then vim.schedule(function() completed = true parse_response_without_stream(result.body) diff --git a/lua/avante/providers/bedrock.lua b/lua/avante/providers/bedrock.lua index 0906046..bbc1bc4 100644 --- a/lua/avante/providers/bedrock.lua +++ b/lua/avante/providers/bedrock.lua @@ -41,6 +41,16 @@ function M.parse_stream_data(ctx, data, opts) end end +function M.parse_response_without_stream(data, event_state, opts) + local bedrock_match = data:gmatch("exception(%b{})") + opts.on_chunk("\n**Exception caught**\n\n") + for bedrock_data_match in bedrock_match do + local jsn = vim.json.decode(bedrock_data_match) + opts.on_chunk("- " .. jsn.message .. "\n") + end + vim.schedule(function() opts.on_stop({ reason = "complete" }) end) +end + ---@param provider AvanteBedrockProviderFunctor ---@param prompt_opts AvantePromptOptions ---@return table