From ecc5eb30a50c9344679722708ec3b937c5b11bfd Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Sun, 11 Aug 2024 04:47:29 -0400 Subject: [PATCH] Fix OpenRouter usage with better error handling --- src/api/openrouter.ts | 8 +++++++- webview-ui/src/components/ChatView.tsx | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/api/openrouter.ts b/src/api/openrouter.ts index 64fcfa7..3171c15 100644 --- a/src/api/openrouter.ts +++ b/src/api/openrouter.ts @@ -54,6 +54,11 @@ export class OpenRouterHandler implements ApiHandler { tool_choice: "auto", }) + const errorMessage = (completion as any).error?.message // openrouter returns an error object instead of the openai sdk throwing an error + if (errorMessage) { + throw new Error(errorMessage) + } + // Convert OpenAI response to Anthropic format const openAiMessage = completion.choices[0].message const anthropicMessage: Anthropic.Messages.Message = { @@ -246,7 +251,8 @@ export class OpenRouterHandler implements ApiHandler { openAiMessages.push({ role: "assistant", content, - tool_calls, + // Cannot be an empty array. API expects an array with minimum length 1, and will respond with an error if it's empty + tool_calls: tool_calls.length > 0 ? tool_calls : undefined, }) } } diff --git a/webview-ui/src/components/ChatView.tsx b/webview-ui/src/components/ChatView.tsx index 3dc1eb4..556999d 100644 --- a/webview-ui/src/components/ChatView.tsx +++ b/webview-ui/src/components/ChatView.tsx @@ -395,6 +395,12 @@ const ChatView = ({ case "api_req_finished": // combineApiRequests removes this from modifiedMessages anyways case "api_req_retried": // this message is used to update the latest api_req_started that the request was retried return false + case "text": + // Sometimes Claude returns an empty text message, we don't want to render these. (We also use a say text for user messages, so in case they just sent images we still render that) + if ((message.text ?? "") === "" && (message.images?.length ?? 0) === 0) { + return false + } + break } return true })