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