From 1bbafc8b7db15b88cabbe8cb827dee0edf325c91 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 10 Mar 2023 08:12:35 +0100 Subject: [PATCH] OpenAI: improved error handling --- .../eu/faircode/email/FragmentCompose.java | 2 +- .../main/java/eu/faircode/email/OpenAI.java | 25 +++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index d3def5e8ba..a2082bcc2a 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -2510,7 +2510,7 @@ public class FragmentCompose extends FragmentBase { @Override protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); + Log.unexpectedError(getParentFragmentManager(), ex, !(ex instanceof IOException)); } }.execute(this, args, "openai"); } diff --git a/app/src/main/java/eu/faircode/email/OpenAI.java b/app/src/main/java/eu/faircode/email/OpenAI.java index 17bb7d4da4..3efcb7678b 100644 --- a/app/src/main/java/eu/faircode/email/OpenAI.java +++ b/app/src/main/java/eu/faircode/email/OpenAI.java @@ -179,9 +179,30 @@ public class OpenAI { // https://platform.openai.com/docs/guides/error-codes/api-errors String error = "Error " + status + ": " + connection.getResponseMessage(); try { + // HTTP 429 + // { + // "error": { + // "message": "You exceeded your current quota, please check your plan and billing details.", + // "type": "insufficient_quota", + // "param": null, + // "code": null + // } + //} InputStream is = connection.getErrorStream(); - if (is != null) - error += "\n" + Helper.readStream(is); + if (is != null) { + String err = Helper.readStream(is); + if (BuildConfig.DEBUG) + error += "\n" + err; + else { + Log.w(new Throwable(err)); + try { + JSONObject jerror = new JSONObject(err).getJSONObject("error"); + error += "\n" + jerror.getString("type") + ": " + jerror.getString("message"); + } catch (JSONException ignored) { + error += "\n" + err; + } + } + } } catch (Throwable ex) { Log.w(ex); }