From 652b5de442ab985a92b8cb62d1c144475697ef74 Mon Sep 17 00:00:00 2001 From: DevEmperor <56255079+devemperor@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:01:32 +0200 Subject: [PATCH] added usage calculation for Whisper --- .../devemperor/wristassist/activities/ChatActivity.java | 2 -- .../wristassist/activities/CreateImageActivity.java | 6 +----- .../wristassist/activities/InputWhisperActivity.java | 7 +++++-- .../net/devemperor/wristassist/adapters/UsageAdapter.java | 5 ++++- .../net/devemperor/wristassist/util/WristAssistUtil.java | 6 ++++++ app/src/main/res/values-de-rDE/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/net/devemperor/wristassist/activities/ChatActivity.java b/app/src/main/java/net/devemperor/wristassist/activities/ChatActivity.java index 0f115fd..c3e2a7f 100644 --- a/app/src/main/java/net/devemperor/wristassist/activities/ChatActivity.java +++ b/app/src/main/java/net/devemperor/wristassist/activities/ChatActivity.java @@ -317,14 +317,12 @@ private void query(String query) throws JSONException, IOException { fc.setCustomKey("settings", sp.getAll().toString()); fc.setUserId(sp.getString("net.devemperor.wristassist.userid", "null")); fc.recordException(e); - fc.sendUnsentReports(); runOnUiThread(() -> { if (sp.getBoolean("net.devemperor.wristassist.vibrate", true)) { vibrator.vibrate(VibrationEffect.createWaveform(new long[]{50, 50, 50, 50, 50}, new int[]{-1, 0, -1, 0, -1}, -1)); } - e.printStackTrace(); if (Objects.requireNonNull(e.getMessage()).contains("SocketTimeoutException")) { errorTv.setText(R.string.wristassist_timeout); } else if (e.getMessage().contains("API key")) { diff --git a/app/src/main/java/net/devemperor/wristassist/activities/CreateImageActivity.java b/app/src/main/java/net/devemperor/wristassist/activities/CreateImageActivity.java index 2368464..4786fcc 100644 --- a/app/src/main/java/net/devemperor/wristassist/activities/CreateImageActivity.java +++ b/app/src/main/java/net/devemperor/wristassist/activities/CreateImageActivity.java @@ -203,9 +203,7 @@ public void run() { fc.setCustomKey("settings", sp.getAll().toString()); fc.setUserId(sp.getString("net.devemperor.wristassist.userid", "null")); fc.recordException(e); - fc.sendUnsentReports(); - e.printStackTrace(); runOnUiThread(() -> { imagePb.setVisibility(View.GONE); errorTv.setVisibility(View.VISIBLE); @@ -260,9 +258,7 @@ public void saveImage(View view) { bitmap.compress(Bitmap.CompressFormat.PNG, 90, out); out.flush(); out.close(); - } catch (IOException e) { - e.printStackTrace(); - } + } catch (IOException ignored) { } timer.cancel(); Intent data = new Intent(); diff --git a/app/src/main/java/net/devemperor/wristassist/activities/InputWhisperActivity.java b/app/src/main/java/net/devemperor/wristassist/activities/InputWhisperActivity.java index aa6a315..a5bf435 100644 --- a/app/src/main/java/net/devemperor/wristassist/activities/InputWhisperActivity.java +++ b/app/src/main/java/net/devemperor/wristassist/activities/InputWhisperActivity.java @@ -30,6 +30,8 @@ import com.theokanning.openai.service.OpenAiService; import net.devemperor.wristassist.R; +import net.devemperor.wristassist.database.UsageDatabaseHelper; +import net.devemperor.wristassist.util.WristAssistUtil; import java.io.File; import java.io.IOException; @@ -55,6 +57,7 @@ public class InputWhisperActivity extends AppCompatActivity { ImageView errorIv2; SharedPreferences sp; + UsageDatabaseHelper usageDatabaseHelper; MediaRecorder recorder; Runnable recordTimeRunnable; Handler recordTimeHandler; @@ -76,6 +79,7 @@ protected void onCreate(Bundle savedInstanceState) { errorIv2 = findViewById(R.id.activity_input_whisper_error_iv2); sp = getSharedPreferences("net.devemperor.wristassist", MODE_PRIVATE); + usageDatabaseHelper = new UsageDatabaseHelper(this); recordTimeHandler = new Handler(Looper.getMainLooper()); recordTimeRunnable = new Runnable() { @@ -221,7 +225,7 @@ private void startWhisperApiRequest() { .build(); TranscriptionResult result = service.createTranscription(request, new File(getCacheDir(), "whisper_input_audio.mp3")); - // TODO: add usage to db + usageDatabaseHelper.edit("whisper-1", Math.round(result.getDuration()), WristAssistUtil.calcCostWhisper(result.getDuration())); Intent data = new Intent(); data.putExtra("net.devemperor.wristassist.input.content", result.getText()); @@ -234,7 +238,6 @@ private void startWhisperApiRequest() { fc.setCustomKey("settings", sp.getAll().toString()); fc.setUserId(sp.getString("net.devemperor.wristassist.userid", "null")); fc.recordException(e); - fc.sendUnsentReports(); showError(); } diff --git a/app/src/main/java/net/devemperor/wristassist/adapters/UsageAdapter.java b/app/src/main/java/net/devemperor/wristassist/adapters/UsageAdapter.java index a7d3e75..da3b4f5 100644 --- a/app/src/main/java/net/devemperor/wristassist/adapters/UsageAdapter.java +++ b/app/src/main/java/net/devemperor/wristassist/adapters/UsageAdapter.java @@ -41,9 +41,12 @@ public View getView (int position, View convertView, @NonNull ViewGroup parent) if (dataProvider.getModelName().startsWith("gpt")) { tokensTv.setText(context.getString(R.string.wristassist_token_usage, String.format(Locale.getDefault(), "%,d", dataProvider.getTokens()))); - } else { + } else if (dataProvider.getModelName().startsWith("dall-e")) { tokensTv.setText(context.getString(R.string.wristassist_images_count, String.format(Locale.getDefault(), "%,d", dataProvider.getTokens()))); + } else if (dataProvider.getModelName().startsWith("whisper")) { + tokensTv.setText(context.getString(R.string.wristassist_whisper_count, + dataProvider.getTokens() / 60, dataProvider.getTokens() % 60)); } TextView costTv = listItem.findViewById(R.id.item_usage_cost_tv); diff --git a/app/src/main/java/net/devemperor/wristassist/util/WristAssistUtil.java b/app/src/main/java/net/devemperor/wristassist/util/WristAssistUtil.java index 312d86b..3d03ecd 100644 --- a/app/src/main/java/net/devemperor/wristassist/util/WristAssistUtil.java +++ b/app/src/main/java/net/devemperor/wristassist/util/WristAssistUtil.java @@ -75,6 +75,10 @@ public static double calcCostImage(String model, String quality, String size) { return 0; } + public static double calcCostWhisper(double duration) { + return Math.round(duration) * 0.0001; + } + public static String translate(Context context, String origin) { switch (origin) { case "gpt-4o-mini": @@ -91,6 +95,8 @@ public static String translate(Context context, String origin) { return "DALL-E 3"; case "dall-e-2": return "DALL-E 2"; + case "whisper-1": + return "Whisper"; case "hd": return "HD"; case "standard": diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 0d2159b..c1068e6 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -96,4 +96,5 @@ Lege eine globale System Anweisung fest ### Version 3.1.0 \n#### Globale System Anweisungen \nDu kannst jetzt in den Einstellungen eine globale Systemrolle festlegen, die die KI in jedem Chat verwenden wird. \n ### Version 3.1.1 \n#### Neues GPT-4 Omni Mini Modell \nOpenAI hat ihr neues Modell GPT-4o mini veröffentlicht, das ihr kostengünstigstes kleines Modell ist – intelligenter und billiger als GPT-3.5 Turbo und hat auch Vision-Fähigkeiten. Das Modell hat einen Kontext von 128K und eine Wissensgrenze bis Oktober 2023. Du kannst in den Einstellungen zu diesem Modell wechseln, das 60% günstiger ist als GPT-3.5 Turbo. \n + Transkriptionszeit:\n%1$d min, %2$d s \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 99d01b8..9186844 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -105,4 +105,5 @@ Define global system prompt ### Version 3.1.0 \n#### Global system prompts \nYou can now set a global system role in the settings, that the AI will use in every chat. \n ### Version 3.1.1 \n#### New GPT-4 Omni mini model \nOpenAI released their new model GPT-4o mini, which is their most cost-efficient small model that\'s smarter and cheaper than GPT-3.5 Turbo, and has vision capabilities. The model has 128K context and an October 2023 knowledge cutoff. You can switch to this model, which is 60% cheaper than GPT-3.5 Turbo, in the settings. \n + Transcription time:\n%1$d min, %2$d s \ No newline at end of file