refactor: remove omitProviderInModelName functionality and related localization

- Removed the omitProviderInModelName key from PreferenceKeys and its associated logic throughout the codebase.
- Updated SettingsService and AppSettings to eliminate references to the omitted provider functionality.
- Cleaned up related localization strings in multiple languages to reflect the removal of this feature.
- Enhanced code clarity and maintainability by streamlining settings management.
This commit is contained in:
cogwheel0
2025-10-04 23:43:35 +05:30
parent f4e4e86c38
commit 072453d588
14 changed files with 6 additions and 143 deletions

View File

@@ -8,7 +8,6 @@ final class PreferenceKeys {
static const String largeText = 'large_text';
static const String darkMode = 'dark_mode';
static const String defaultModel = 'default_model';
static const String omitProviderInModelName = 'omit_provider_in_model_name';
static const String voiceLocaleId = 'voice_locale_id';
static const String voiceHoldToTalk = 'voice_hold_to_talk';
static const String voiceAutoSendFinal = 'voice_auto_send_final';

View File

@@ -79,7 +79,6 @@ class PersistenceMigrator {
copyBool(PreferenceKeys.largeText);
copyBool(PreferenceKeys.darkMode);
copyString(PreferenceKeys.defaultModel);
copyBool(PreferenceKeys.omitProviderInModelName);
copyString(PreferenceKeys.voiceLocaleId);
copyBool(PreferenceKeys.voiceHoldToTalk);
copyBool(PreferenceKeys.voiceAutoSendFinal);
@@ -185,7 +184,6 @@ class PersistenceMigrator {
PreferenceKeys.largeText,
PreferenceKeys.darkMode,
PreferenceKeys.defaultModel,
PreferenceKeys.omitProviderInModelName,
PreferenceKeys.voiceLocaleId,
PreferenceKeys.voiceHoldToTalk,
PreferenceKeys.voiceAutoSendFinal,

View File

@@ -17,9 +17,6 @@ class SettingsService {
static const String _largeTextKey = PreferenceKeys.largeText;
static const String _darkModeKey = PreferenceKeys.darkMode;
static const String _defaultModelKey = PreferenceKeys.defaultModel;
// Model name formatting
static const String _omitProviderInModelNameKey =
PreferenceKeys.omitProviderInModelName;
// Voice input settings
static const String _voiceLocaleKey = PreferenceKeys.voiceLocaleId;
static const String _voiceHoldToTalkKey = PreferenceKeys.voiceHoldToTalk;
@@ -117,16 +114,6 @@ class SettingsService {
return box.delete(_defaultModelKey);
}
/// Whether to omit the provider prefix when displaying model names
static Future<bool> getOmitProviderInModelName() {
final value = _preferencesBox().get(_omitProviderInModelNameKey) as bool?;
return Future.value(value ?? true);
}
static Future<void> setOmitProviderInModelName(bool value) {
return _preferencesBox().put(_omitProviderInModelNameKey, value);
}
/// Load all settings
static Future<AppSettings> loadSettings() {
final box = _preferencesBox();
@@ -140,8 +127,6 @@ class SettingsService {
largeText: (box.get(_largeTextKey) as bool?) ?? false,
darkMode: (box.get(_darkModeKey) as bool?) ?? true,
defaultModel: box.get(_defaultModelKey) as String?,
omitProviderInModelName:
(box.get(_omitProviderInModelNameKey) as bool?) ?? true,
voiceLocaleId: box.get(_voiceLocaleKey) as String?,
voiceHoldToTalk: (box.get(_voiceHoldToTalkKey) as bool?) ?? false,
voiceAutoSendFinal: (box.get(_voiceAutoSendKey) as bool?) ?? false,
@@ -165,7 +150,6 @@ class SettingsService {
_highContrastKey: settings.highContrast,
_largeTextKey: settings.largeText,
_darkModeKey: settings.darkMode,
_omitProviderInModelNameKey: settings.omitProviderInModelName,
_voiceHoldToTalkKey: settings.voiceHoldToTalk,
_voiceAutoSendKey: settings.voiceAutoSendFinal,
_socketTransportModeKey: settings.socketTransportMode,
@@ -305,7 +289,6 @@ class AppSettings {
final bool largeText;
final bool darkMode;
final String? defaultModel;
final bool omitProviderInModelName;
final String? voiceLocaleId;
final bool voiceHoldToTalk;
final bool voiceAutoSendFinal;
@@ -320,7 +303,6 @@ class AppSettings {
this.largeText = false,
this.darkMode = true,
this.defaultModel,
this.omitProviderInModelName = true,
this.voiceLocaleId,
this.voiceHoldToTalk = false,
this.voiceAutoSendFinal = false,
@@ -337,7 +319,6 @@ class AppSettings {
bool? largeText,
bool? darkMode,
Object? defaultModel = const _DefaultValue(),
bool? omitProviderInModelName,
Object? voiceLocaleId = const _DefaultValue(),
bool? voiceHoldToTalk,
bool? voiceAutoSendFinal,
@@ -355,8 +336,6 @@ class AppSettings {
defaultModel: defaultModel is _DefaultValue
? this.defaultModel
: defaultModel as String?,
omitProviderInModelName:
omitProviderInModelName ?? this.omitProviderInModelName,
voiceLocaleId: voiceLocaleId is _DefaultValue
? this.voiceLocaleId
: voiceLocaleId as String?,
@@ -379,7 +358,6 @@ class AppSettings {
other.largeText == largeText &&
other.darkMode == darkMode &&
other.defaultModel == defaultModel &&
other.omitProviderInModelName == omitProviderInModelName &&
other.voiceLocaleId == voiceLocaleId &&
other.voiceHoldToTalk == voiceHoldToTalk &&
other.voiceAutoSendFinal == voiceAutoSendFinal &&
@@ -398,7 +376,6 @@ class AppSettings {
largeText,
darkMode,
defaultModel,
omitProviderInModelName,
voiceLocaleId,
voiceHoldToTalk,
voiceAutoSendFinal,
@@ -475,11 +452,6 @@ class AppSettingsNotifier extends _$AppSettingsNotifier {
await SettingsService.setDefaultModel(modelId);
}
Future<void> setOmitProviderInModelName(bool value) async {
state = state.copyWith(omitProviderInModelName: value);
await SettingsService.setOmitProviderInModelName(value);
}
Future<void> setVoiceLocaleId(String? localeId) async {
state = state.copyWith(voiceLocaleId: localeId);
await SettingsService.setVoiceLocaleId(localeId);

View File

@@ -72,20 +72,8 @@ class _ChatPageState extends ConsumerState<ChatPage> {
String? _cachedGreetingName;
bool _greetingReady = false;
String _formatModelDisplayName(String name, {required bool omitProvider}) {
var display = name.trim();
if (omitProvider) {
// Prefer the segment after the last '/'
if (display.contains('/')) {
display = display.split('/').last.trim();
}
// If an org prefix like 'OpenAI: gpt-4o' exists, use the part after ':'
if (display.contains(':')) {
final parts = display.split(':');
display = parts.last.trim();
}
}
return display;
String _formatModelDisplayName(String name) {
return name.trim();
}
bool validateFileCount(int currentCount, int newCount, int maxCount) {
@@ -830,9 +818,6 @@ class _ChatPageState extends ConsumerState<ChatPage> {
Model? matchedModel;
final rawModel = message.model;
if (rawModel != null && rawModel.isNotEmpty) {
final omitProvider = ref
.watch(appSettingsProvider)
.omitProviderInModelName;
final modelsAsync = ref.watch(modelsProvider);
if (modelsAsync.hasValue) {
final models = modelsAsync.value!;
@@ -842,23 +827,14 @@ class _ChatPageState extends ConsumerState<ChatPage> {
(m) => m.id == rawModel || m.name == rawModel,
);
matchedModel = match;
displayModelName = _formatModelDisplayName(
match.name,
omitProvider: omitProvider,
);
displayModelName = _formatModelDisplayName(match.name);
} catch (_) {
// As a fallback, format the raw value to be more readable
displayModelName = _formatModelDisplayName(
rawModel,
omitProvider: omitProvider,
);
displayModelName = _formatModelDisplayName(rawModel);
}
} else {
// Models not loaded yet; format raw value for readability
displayModelName = _formatModelDisplayName(
rawModel,
omitProvider: omitProvider,
);
displayModelName = _formatModelDisplayName(rawModel);
}
}
@@ -1062,11 +1038,6 @@ class _ChatPageState extends ConsumerState<ChatPage> {
// Watch reviewer mode and auto-select model if needed
final isReviewerMode = ref.watch(reviewerModeProvider);
final omitProviderInModelName = ref.watch(
appSettingsProvider.select(
(settings) => settings.omitProviderInModelName,
),
);
final conversationId = ref.watch(
activeConversationProvider.select((conv) => conv?.id),
);
@@ -1091,10 +1062,7 @@ class _ChatPageState extends ConsumerState<ChatPage> {
? trimmedConversationTitle
: null;
final formattedModelName = selectedModel != null
? _formatModelDisplayName(
selectedModel.name,
omitProvider: omitProviderInModelName,
)
? _formatModelDisplayName(selectedModel.name)
: null;
final modelLabel = formattedModelName ?? l10n.chooseModel;
final hasConversationTitle = displayConversationTitle != null;

View File

@@ -157,28 +157,6 @@ class AppCustomizationPage extends ConsumerWidget {
}
},
),
const SizedBox(height: Spacing.md),
_CustomizationTile(
leading: _buildIconBadge(
context,
Platform.isIOS ? CupertinoIcons.textformat : Icons.text_fields,
color: theme.buttonPrimary,
),
title: AppLocalizations.of(context)!.hideProviderInModelNames,
subtitle: AppLocalizations.of(
context,
)!.hideProviderInModelNamesDescription,
trailing: Switch.adaptive(
value: settings.omitProviderInModelName,
onChanged: (v) => ref
.read(appSettingsProvider.notifier)
.setOmitProviderInModelName(v),
),
showChevron: false,
onTap: () => ref
.read(appSettingsProvider.notifier)
.setOmitProviderInModelName(!settings.omitProviderInModelName),
),
],
);
}

View File

@@ -291,8 +291,6 @@
"quickActionsDescription": "Wähle bis zu zwei Schnellzugriffe, die neben dem Eingabefeld angepinnt werden",
"display": "Anzeige",
"realtime": "Echtzeit",
"hideProviderInModelNames": "Anbieter in Modellnamen ausblenden",
"hideProviderInModelNamesDescription": "Zeige Namen wie \"gpt-4o\" statt \"openai/gpt-4o\".",
"transportMode": "Transportmodus",
"transportModeDescription": "Wähle, wie die App für Echtzeit-Updates verbindet.",
"mode": "Modus",

View File

@@ -584,10 +584,6 @@
"@display": {"description": "Section header for visual and layout related settings."},
"realtime": "Realtime",
"@realtime": {"description": "Section header for realtime/transport settings."},
"hideProviderInModelNames": "Hide provider in model names",
"@hideProviderInModelNames": {"description": "Toggle label to hide the provider prefix in model names (e.g., show gpt-4o instead of openai/gpt-4o)."},
"hideProviderInModelNamesDescription": "Show names like \"gpt-4o\" instead of \"openai/gpt-4o\".",
"@hideProviderInModelNamesDescription": {"description": "Helper text for provider hiding toggle."},
"transportMode": "Transport mode",
"@transportMode": {"description": "Title for selecting the networking transport used for realtime."},
"transportModeDescription": "Choose how the app connects for realtime updates.",

View File

@@ -291,8 +291,6 @@
"quickActionsDescription": "Choisissez jusqu'à deux raccourcis à épingler près du champ de saisie",
"display": "Affichage",
"realtime": "Temps réel",
"hideProviderInModelNames": "Masquer le fournisseur dans les noms de modèles",
"hideProviderInModelNamesDescription": "Afficher des noms comme \"gpt-4o\" au lieu de \"openai/gpt-4o\".",
"transportMode": "Mode de transport",
"transportModeDescription": "Choisissez comment l'app se connecte pour les mises à jour en temps réel.",
"mode": "Mode",

View File

@@ -291,8 +291,6 @@
"quickActionsDescription": "Scegli fino a due scorciatoie da fissare vicino al campo di input",
"display": "Schermo",
"realtime": "Tempo reale",
"hideProviderInModelNames": "Nascondi provider nei nomi dei modelli",
"hideProviderInModelNamesDescription": "Mostra nomi come \"gpt-4o\" invece di \"openai/gpt-4o\".",
"transportMode": "Modalità di trasporto",
"transportModeDescription": "Scegli come l'app si connette per gli aggiornamenti in tempo reale.",
"mode": "Modalità",

View File

@@ -1596,18 +1596,6 @@ abstract class AppLocalizations {
/// **'Realtime'**
String get realtime;
/// Toggle label to hide the provider prefix in model names (e.g., show gpt-4o instead of openai/gpt-4o).
///
/// In en, this message translates to:
/// **'Hide provider in model names'**
String get hideProviderInModelNames;
/// Helper text for provider hiding toggle.
///
/// In en, this message translates to:
/// **'Show names like \"gpt-4o\" instead of \"openai/gpt-4o\".'**
String get hideProviderInModelNamesDescription;
/// Title for selecting the networking transport used for realtime.
///
/// In en, this message translates to:

View File

@@ -835,13 +835,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get realtime => 'Echtzeit';
@override
String get hideProviderInModelNames => 'Anbieter in Modellnamen ausblenden';
@override
String get hideProviderInModelNamesDescription =>
'Zeige Namen wie \"gpt-4o\" statt \"openai/gpt-4o\".';
@override
String get transportMode => 'Transportmodus';

View File

@@ -828,13 +828,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get realtime => 'Realtime';
@override
String get hideProviderInModelNames => 'Hide provider in model names';
@override
String get hideProviderInModelNamesDescription =>
'Show names like \"gpt-4o\" instead of \"openai/gpt-4o\".';
@override
String get transportMode => 'Transport mode';

View File

@@ -843,14 +843,6 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get realtime => 'Temps réel';
@override
String get hideProviderInModelNames =>
'Masquer le fournisseur dans les noms de modèles';
@override
String get hideProviderInModelNamesDescription =>
'Afficher des noms comme \"gpt-4o\" au lieu de \"openai/gpt-4o\".';
@override
String get transportMode => 'Mode de transport';

View File

@@ -832,14 +832,6 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get realtime => 'Tempo reale';
@override
String get hideProviderInModelNames =>
'Nascondi provider nei nomi dei modelli';
@override
String get hideProviderInModelNamesDescription =>
'Mostra nomi come \"gpt-4o\" invece di \"openai/gpt-4o\".';
@override
String get transportMode => 'Modalità di trasporto';