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 largeText = 'large_text';
static const String darkMode = 'dark_mode'; static const String darkMode = 'dark_mode';
static const String defaultModel = 'default_model'; 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 voiceLocaleId = 'voice_locale_id';
static const String voiceHoldToTalk = 'voice_hold_to_talk'; static const String voiceHoldToTalk = 'voice_hold_to_talk';
static const String voiceAutoSendFinal = 'voice_auto_send_final'; static const String voiceAutoSendFinal = 'voice_auto_send_final';

View File

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

View File

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

View File

@@ -72,20 +72,8 @@ class _ChatPageState extends ConsumerState<ChatPage> {
String? _cachedGreetingName; String? _cachedGreetingName;
bool _greetingReady = false; bool _greetingReady = false;
String _formatModelDisplayName(String name, {required bool omitProvider}) { String _formatModelDisplayName(String name) {
var display = name.trim(); return 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;
} }
bool validateFileCount(int currentCount, int newCount, int maxCount) { bool validateFileCount(int currentCount, int newCount, int maxCount) {
@@ -830,9 +818,6 @@ class _ChatPageState extends ConsumerState<ChatPage> {
Model? matchedModel; Model? matchedModel;
final rawModel = message.model; final rawModel = message.model;
if (rawModel != null && rawModel.isNotEmpty) { if (rawModel != null && rawModel.isNotEmpty) {
final omitProvider = ref
.watch(appSettingsProvider)
.omitProviderInModelName;
final modelsAsync = ref.watch(modelsProvider); final modelsAsync = ref.watch(modelsProvider);
if (modelsAsync.hasValue) { if (modelsAsync.hasValue) {
final models = modelsAsync.value!; final models = modelsAsync.value!;
@@ -842,23 +827,14 @@ class _ChatPageState extends ConsumerState<ChatPage> {
(m) => m.id == rawModel || m.name == rawModel, (m) => m.id == rawModel || m.name == rawModel,
); );
matchedModel = match; matchedModel = match;
displayModelName = _formatModelDisplayName( displayModelName = _formatModelDisplayName(match.name);
match.name,
omitProvider: omitProvider,
);
} catch (_) { } catch (_) {
// As a fallback, format the raw value to be more readable // As a fallback, format the raw value to be more readable
displayModelName = _formatModelDisplayName( displayModelName = _formatModelDisplayName(rawModel);
rawModel,
omitProvider: omitProvider,
);
} }
} else { } else {
// Models not loaded yet; format raw value for readability // Models not loaded yet; format raw value for readability
displayModelName = _formatModelDisplayName( displayModelName = _formatModelDisplayName(rawModel);
rawModel,
omitProvider: omitProvider,
);
} }
} }
@@ -1062,11 +1038,6 @@ class _ChatPageState extends ConsumerState<ChatPage> {
// Watch reviewer mode and auto-select model if needed // Watch reviewer mode and auto-select model if needed
final isReviewerMode = ref.watch(reviewerModeProvider); final isReviewerMode = ref.watch(reviewerModeProvider);
final omitProviderInModelName = ref.watch(
appSettingsProvider.select(
(settings) => settings.omitProviderInModelName,
),
);
final conversationId = ref.watch( final conversationId = ref.watch(
activeConversationProvider.select((conv) => conv?.id), activeConversationProvider.select((conv) => conv?.id),
); );
@@ -1091,10 +1062,7 @@ class _ChatPageState extends ConsumerState<ChatPage> {
? trimmedConversationTitle ? trimmedConversationTitle
: null; : null;
final formattedModelName = selectedModel != null final formattedModelName = selectedModel != null
? _formatModelDisplayName( ? _formatModelDisplayName(selectedModel.name)
selectedModel.name,
omitProvider: omitProviderInModelName,
)
: null; : null;
final modelLabel = formattedModelName ?? l10n.chooseModel; final modelLabel = formattedModelName ?? l10n.chooseModel;
final hasConversationTitle = displayConversationTitle != null; 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", "quickActionsDescription": "Wähle bis zu zwei Schnellzugriffe, die neben dem Eingabefeld angepinnt werden",
"display": "Anzeige", "display": "Anzeige",
"realtime": "Echtzeit", "realtime": "Echtzeit",
"hideProviderInModelNames": "Anbieter in Modellnamen ausblenden",
"hideProviderInModelNamesDescription": "Zeige Namen wie \"gpt-4o\" statt \"openai/gpt-4o\".",
"transportMode": "Transportmodus", "transportMode": "Transportmodus",
"transportModeDescription": "Wähle, wie die App für Echtzeit-Updates verbindet.", "transportModeDescription": "Wähle, wie die App für Echtzeit-Updates verbindet.",
"mode": "Modus", "mode": "Modus",

View File

@@ -584,10 +584,6 @@
"@display": {"description": "Section header for visual and layout related settings."}, "@display": {"description": "Section header for visual and layout related settings."},
"realtime": "Realtime", "realtime": "Realtime",
"@realtime": {"description": "Section header for realtime/transport settings."}, "@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": "Transport mode",
"@transportMode": {"description": "Title for selecting the networking transport used for realtime."}, "@transportMode": {"description": "Title for selecting the networking transport used for realtime."},
"transportModeDescription": "Choose how the app connects for realtime updates.", "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", "quickActionsDescription": "Choisissez jusqu'à deux raccourcis à épingler près du champ de saisie",
"display": "Affichage", "display": "Affichage",
"realtime": "Temps réel", "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", "transportMode": "Mode de transport",
"transportModeDescription": "Choisissez comment l'app se connecte pour les mises à jour en temps réel.", "transportModeDescription": "Choisissez comment l'app se connecte pour les mises à jour en temps réel.",
"mode": "Mode", "mode": "Mode",

View File

@@ -291,8 +291,6 @@
"quickActionsDescription": "Scegli fino a due scorciatoie da fissare vicino al campo di input", "quickActionsDescription": "Scegli fino a due scorciatoie da fissare vicino al campo di input",
"display": "Schermo", "display": "Schermo",
"realtime": "Tempo reale", "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", "transportMode": "Modalità di trasporto",
"transportModeDescription": "Scegli come l'app si connette per gli aggiornamenti in tempo reale.", "transportModeDescription": "Scegli come l'app si connette per gli aggiornamenti in tempo reale.",
"mode": "Modalità", "mode": "Modalità",

View File

@@ -1596,18 +1596,6 @@ abstract class AppLocalizations {
/// **'Realtime'** /// **'Realtime'**
String get 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. /// Title for selecting the networking transport used for realtime.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

@@ -835,13 +835,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override @override
String get realtime => 'Echtzeit'; 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 @override
String get transportMode => 'Transportmodus'; String get transportMode => 'Transportmodus';

View File

@@ -828,13 +828,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override @override
String get realtime => 'Realtime'; 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 @override
String get transportMode => 'Transport mode'; String get transportMode => 'Transport mode';

View File

@@ -843,14 +843,6 @@ class AppLocalizationsFr extends AppLocalizations {
@override @override
String get realtime => 'Temps réel'; 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 @override
String get transportMode => 'Mode de transport'; String get transportMode => 'Mode de transport';

View File

@@ -832,14 +832,6 @@ class AppLocalizationsIt extends AppLocalizations {
@override @override
String get realtime => 'Tempo reale'; 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 @override
String get transportMode => 'Modalità di trasporto'; String get transportMode => 'Modalità di trasporto';