j3soon/whisper-to-input

Better exception handling and logging

Opened this issue · 1 comments

As mentioned in the offline reported by @ijsun, the current keyboard will fail silently after using it for a while.

When encountered this issue, a simple Clear All to close all apps can reliably fix the issue by resetting the keyboard. Unfortunately, the steps to reproduce this issue is remained unknown. (not sure if it's due to unreliable internet connection)

This kind of nondeterministic silent failure is difficult to debug. Therefore, we should somehow add a logging mechanism that can report all kinds of silent exceptions and maybe save it in a second page of the keyboard settings app, allowing the user to go through it for debugging purposes. (It's better to allow debugging directly on user's phone without the need of using adb or other external PC tools)

Potentially related:

2023/12/02 Update: Clearing the cache in the app settings page can also fix the issue by resetting the keyboard.

Without thinking too much, I guess this issue may be related to the Exception thrown here:

if (!response.isSuccessful || response.code / 100 != 2) {
throw Exception(response.body!!.string().replace('\n', ' '))
}

The exception may cause the onStartTranscription to fail and make the WhisperInputService requiring a reset to work again:

private fun onStartTranscription() {
recorderManager.stop()
whisperJobManager.startAsync(
this,
recordedAudioFilename,
AUDIO_MEDIA_TYPE,
{ transcriptionCallback(it) },
{ transcriptionExceptionCallback(it) }
)
}

A potential solution is to not throw an exception, but display a Toast message instead. This is just my random guess though...

Another observation by @ijsun is that the amplitude feature still works when the issue occurs.