mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
Add radio selection for threshold
This commit is contained in:
parent
a59b723365
commit
c7113297fb
@ -21,6 +21,7 @@ import androidx.compose.material.icons.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.ArrowForward
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.RadioButton
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Switch
|
||||
import androidx.compose.material3.Text
|
||||
@ -221,6 +222,27 @@ fun SettingToggleSharedPrefs(
|
||||
title, useSharedPrefsBool(key, default), subtitle, disabledSubtitle, disabled, icon)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun<T> SettingRadio(
|
||||
title: String,
|
||||
options: List<T>,
|
||||
optionNames: List<String>,
|
||||
setting: SettingsKey<T>,
|
||||
) {
|
||||
val (value, setValue) = useDataStore(key = setting.key, default = setting.default)
|
||||
|
||||
ScreenTitle(title, showBack = false)
|
||||
Column {
|
||||
options.zip(optionNames).forEach {
|
||||
SettingItem(title = it.second, onClick = { setValue(it.first) }, icon = {
|
||||
RadioButton(selected = value == it.first, onClick = null)
|
||||
}) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ScrollableList(content: @Composable () -> Unit) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
@ -15,9 +15,11 @@ import org.futo.inputmethod.latin.uix.settings.NavigationItem
|
||||
import org.futo.inputmethod.latin.uix.settings.NavigationItemStyle
|
||||
import org.futo.inputmethod.latin.uix.settings.ScreenTitle
|
||||
import org.futo.inputmethod.latin.uix.settings.ScrollableList
|
||||
import org.futo.inputmethod.latin.uix.settings.SettingRadio
|
||||
import org.futo.inputmethod.latin.uix.settings.SettingToggleSharedPrefs
|
||||
import org.futo.inputmethod.latin.uix.settings.Tip
|
||||
import org.futo.inputmethod.latin.uix.settings.useSharedPrefsBool
|
||||
import org.futo.inputmethod.latin.xlm.AutocorrectThresholdSetting
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
@ -111,5 +113,30 @@ fun PredictiveTextScreen(navController: NavHostController = rememberNavControlle
|
||||
default = booleanResource(R.bool.config_default_next_word_prediction)
|
||||
)
|
||||
}
|
||||
|
||||
if(transformerLmEnabled) {
|
||||
Tip("Adjust the autocorrect threshold below. A lower threshold will autocorrect more often (and miscorrect more often), while a higher threshold will autocorrect less often (and miscorrect less often)" )
|
||||
val options = mapOf(
|
||||
0.0f to "none (94.6% : 5.4%)",
|
||||
1.0f to "very low (93.4% : 4.3%)",
|
||||
2.0f to "very low (91.2% : 2.4%)",
|
||||
4.0f to "low (87.3% : 1.4%)",
|
||||
6.0f to "low (no data)",
|
||||
8.0f to "medium (82.3% : 0.9%)",
|
||||
10.0f to "medium (80.1% : 0.8%)",
|
||||
14.0f to "medium (no data)",
|
||||
18.0f to "high (74.8% : 0.5%)",
|
||||
25.0f to "high (71.6% : 0.4%)",
|
||||
50.0f to "very high (63.5% : 0.3%)",
|
||||
100.0f to "very high (54.7% : 0.2%)"
|
||||
)
|
||||
val names = options.map { "T = ${it.key}" }
|
||||
SettingRadio(
|
||||
title = "Autocorrect Threshold",
|
||||
options = options.keys.toList(),
|
||||
optionNames = names,
|
||||
setting = AutocorrectThresholdSetting
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
@ -66,7 +66,7 @@ public class LanguageModel {
|
||||
SettingsValuesForSuggestion settingsValuesForSuggestion,
|
||||
long proximityInfoHandle,
|
||||
int sessionId,
|
||||
float weightForLocale,
|
||||
float autocorrectThreshold,
|
||||
float[] inOutWeightOfLangModelVsSpatialModel
|
||||
) {
|
||||
Log.d("LanguageModel", "getSuggestions called");
|
||||
@ -170,7 +170,7 @@ public class LanguageModel {
|
||||
String[] outStrings = new String[maxResults];
|
||||
|
||||
// TOOD: Pass multiple previous words information for n-gram.
|
||||
getSuggestionsNative(mNativeState, proximityInfoHandle, context, partialWord, inputMode, xCoords, yCoords, outStrings, outProbabilities);
|
||||
getSuggestionsNative(mNativeState, proximityInfoHandle, context, partialWord, inputMode, xCoords, yCoords, autocorrectThreshold, outStrings, outProbabilities);
|
||||
|
||||
final ArrayList<SuggestedWords.SuggestedWordInfo> suggestions = new ArrayList<>();
|
||||
|
||||
@ -277,6 +277,7 @@ public class LanguageModel {
|
||||
int inputMode,
|
||||
int[] inComposeX,
|
||||
int[] inComposeY,
|
||||
float thresholdSetting,
|
||||
|
||||
// outputs
|
||||
String[] outStrings,
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.futo.inputmethod.latin.xlm;
|
||||
|
||||
import android.content.Context
|
||||
import androidx.datastore.preferences.core.floatPreferencesKey
|
||||
import androidx.lifecycle.LifecycleCoroutineScope
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -24,8 +25,16 @@ import org.futo.inputmethod.latin.common.ComposedData
|
||||
import org.futo.inputmethod.latin.inputlogic.InputLogic
|
||||
import org.futo.inputmethod.latin.settings.Settings
|
||||
import org.futo.inputmethod.latin.settings.SettingsValuesForSuggestion
|
||||
import org.futo.inputmethod.latin.uix.SettingsKey
|
||||
import org.futo.inputmethod.latin.uix.getSetting
|
||||
import org.futo.inputmethod.latin.utils.SuggestionResults
|
||||
|
||||
|
||||
val AutocorrectThresholdSetting = SettingsKey(
|
||||
floatPreferencesKey("lm_autocorrect_threshold"),
|
||||
18.0f
|
||||
)
|
||||
|
||||
public class LanguageModelFacilitator(
|
||||
val context: Context,
|
||||
val inputLogic: InputLogic,
|
||||
@ -70,6 +79,9 @@ public class LanguageModelFacilitator(
|
||||
|
||||
private suspend fun processUpdateSuggestionStrip(values: PredictionInputValues) {
|
||||
computationSemaphore.acquire()
|
||||
|
||||
val autocorrectThreshold = context.getSetting(AutocorrectThresholdSetting)
|
||||
|
||||
try {
|
||||
val job = Job()
|
||||
CoroutineScope(Dispatchers.Default + job).launch {
|
||||
@ -101,7 +113,7 @@ public class LanguageModelFacilitator(
|
||||
settingsForPrediction,
|
||||
proximityInfoHandle,
|
||||
-1,
|
||||
0.0f,
|
||||
autocorrectThreshold,
|
||||
floatArrayOf())
|
||||
|
||||
if(lmSuggestions == null) {
|
||||
|
@ -703,6 +703,7 @@ namespace latinime {
|
||||
jint inputMode,
|
||||
jintArray inComposeX,
|
||||
jintArray inComposeY,
|
||||
jfloat autocorrectThreshold,
|
||||
|
||||
// outputs
|
||||
jobjectArray outPredictions,
|
||||
@ -864,9 +865,9 @@ namespace latinime {
|
||||
sortProbabilityPairVectorDescending(results);
|
||||
|
||||
const char *result_probability_mode;
|
||||
if(results[0].first > 18.0f * results[1].first) {
|
||||
if(results[0].first > autocorrectThreshold * results[1].first) {
|
||||
result_probability_mode = RETURNVAL_AUTOCORRECT;
|
||||
}else if(results[0].first > 1.3 * results[1].first) {
|
||||
}else if(results[0].first > (autocorrectThreshold * 0.1f) * results[1].first) {
|
||||
result_probability_mode = RETURNVAL_UNCERTAIN;
|
||||
} else {
|
||||
result_probability_mode = RETURNVAL_CLUELESS;
|
||||
@ -911,7 +912,7 @@ namespace latinime {
|
||||
},
|
||||
{
|
||||
const_cast<char *>("getSuggestionsNative"),
|
||||
const_cast<char *>("(JJLjava/lang/String;Ljava/lang/String;I[I[I[Ljava/lang/String;[F)V"),
|
||||
const_cast<char *>("(JJLjava/lang/String;Ljava/lang/String;I[I[IF[Ljava/lang/String;[F)V"),
|
||||
reinterpret_cast<void *>(xlm_LanguageModel_getSuggestions)
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user