package modelselection
|
|
import (
|
"voicesnap/internal/config"
|
"voicesnap/internal/language"
|
"voicesnap/internal/logger"
|
"voicesnap/internal/model"
|
)
|
|
type CurrentModel struct {
|
ModelID string
|
Profile model.ModelProfile
|
SelectionMode string
|
LanguageSettings language.LanguageSettings
|
FallbackReason string
|
}
|
|
func Resolve(cfg *config.Config, detector language.SystemLocaleDetector) CurrentModel {
|
if cfg == nil {
|
cfg = config.Default()
|
}
|
|
settings := language.Resolve(cfg.LanguageMode, cfg.LanguageID, detector)
|
selectionMode := config.NormalizeModelSelectionMode(cfg.ModelSelectionMode)
|
modelID := settings.DefaultModelID
|
fallbackReason := ""
|
|
if selectionMode == config.ModelSelectionModeManual {
|
if profile, err := model.GetModelProfile(cfg.SelectedModelID); err == nil {
|
return CurrentModel{
|
ModelID: profile.ID,
|
Profile: profile,
|
SelectionMode: selectionMode,
|
LanguageSettings: settings,
|
}
|
}
|
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)
|
if err != nil {
|
fallbackReason = "invalid language default model"
|
logger.Info("Invalid default model %q for language %q, falling back to %q", modelID, settings.EffectiveLanguageID, model.DefaultModelID)
|
profile = model.DefaultModelProfile()
|
modelID = profile.ID
|
}
|
|
return CurrentModel{
|
ModelID: modelID,
|
Profile: profile,
|
SelectionMode: selectionMode,
|
LanguageSettings: settings,
|
FallbackReason: fallbackReason,
|
}
|
}
|