From 5de2a0495c233e6f12ae1ebb6e71cb6c73fbbc72 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 21:07:16 +0800
Subject: [PATCH] Add release manifest for 2.1.25 Chinese branding candidate

---
 privatevoice.src/internal/modelselection/selection.go |   35 ++++++++++++++++++++++++++++-------
 1 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/privatevoice.src/internal/modelselection/selection.go b/privatevoice.src/internal/modelselection/selection.go
index 0347f37..48f1a9a 100644
--- a/privatevoice.src/internal/modelselection/selection.go
+++ b/privatevoice.src/internal/modelselection/selection.go
@@ -27,15 +27,20 @@
 
 	if selectionMode == config.ModelSelectionModeManual {
 		if profile, err := model.GetModelProfile(cfg.SelectedModelID); err == nil {
-			return CurrentModel{
-				ModelID:          profile.ID,
-				Profile:          profile,
-				SelectionMode:    selectionMode,
-				LanguageSettings: settings,
+			if isModelAvailableForLanguage(profile.ID, settings.EffectiveLanguageID) {
+				return CurrentModel{
+					ModelID:          profile.ID,
+					Profile:          profile,
+					SelectionMode:    selectionMode,
+					LanguageSettings: settings,
+				}
 			}
+			fallbackReason = "manual model not available for language"
+			logger.Info("Manual SelectedModelID %q is not available for language %q, falling back to language default %q", cfg.SelectedModelID, settings.EffectiveLanguageID, modelID)
+		} else {
+			fallbackReason = "invalid manual model selection"
+			logger.Info("Invalid manual SelectedModelID %q, falling back to language default %q", cfg.SelectedModelID, modelID)
 		}
-		fallbackReason = "invalid manual model selection"
-		logger.Info("Invalid manual SelectedModelID %q, falling back to language default %q", cfg.SelectedModelID, modelID)
 	}
 
 	profile, err := model.GetModelProfile(modelID)
@@ -54,3 +59,19 @@
 		FallbackReason:   fallbackReason,
 	}
 }
+
+func isModelAvailableForLanguage(modelID, languageID string) bool {
+	profile, err := model.GetLanguageProfile(languageID)
+	if err != nil {
+		return false
+	}
+	if profile.DefaultModelID == modelID {
+		return true
+	}
+	for _, upgradeModelID := range profile.UpgradeModelIDs {
+		if upgradeModelID == modelID {
+			return true
+		}
+	}
+	return false
+}

--
Gitblit v1.9.3