| | |
| | | import ( |
| | | "fmt" |
| | | "voicesnap/internal/config" |
| | | "voicesnap/internal/language" |
| | | "voicesnap/internal/logger" |
| | | "voicesnap/internal/model" |
| | | "voicesnap/internal/modelselection" |
| | | "voicesnap/internal/paths" |
| | | ) |
| | | |
| | |
| | | cfg, err := config.Load() |
| | | if err != nil { |
| | | logger.Error("Failed to load config for model selection: %v", err) |
| | | return NewWithModelID(model.DefaultModelID) |
| | | cfg = config.Default() |
| | | } |
| | | return NewWithModelID(cfg.SelectedModelID) |
| | | current := modelselection.Resolve(cfg, language.NewSystemDetector()) |
| | | return NewWithModelID(current.ModelID) |
| | | } |
| | | |
| | | func NewWithModelID(modelID string) (Engine, error) { |
| | |
| | | if !resolved.IsUsable() { |
| | | return nil, fmt.Errorf("model %s is not usable: %s missing=%v problems=%v", resolved.ModelID, resolved.Status, resolved.Missing, resolved.Problems) |
| | | } |
| | | if resolved.BackendKind != model.BackendSenseVoice { |
| | | if !isSupportedBackend(resolved.BackendKind) { |
| | | return nil, fmt.Errorf("unsupported backend kind: %s", resolved.BackendKind) |
| | | } |
| | | |
| | | logger.Info("Loading model %s from %s", resolved.ModelID, resolved.RootDir) |
| | | logger.Info("Loading model %s backend=%s from %s", resolved.ModelID, resolved.BackendKind, resolved.RootDir) |
| | | return newPlatformEngine(resolved) |
| | | } |
| | | |
| | | func isSupportedBackend(backend string) bool { |
| | | switch backend { |
| | | case model.BackendSenseVoice, model.BackendMoonshine, model.BackendNemoTransducer, model.BackendQwen3ASR: |
| | | return true |
| | | default: |
| | | return false |
| | | } |
| | | } |
| | | |
| | | func resolveCurrentModel() (model.ResolvedModel, error) { |
| | | cfg, err := config.Load() |
| | | if err != nil { |
| | | return model.ResolveModel(model.DefaultModelID) |
| | | cfg = config.Default() |
| | | } |
| | | return model.ResolveModel(model.NormalizeModelID(cfg.SelectedModelID)) |
| | | current := modelselection.Resolve(cfg, language.NewSystemDetector()) |
| | | return model.ResolveModel(current.ModelID) |
| | | } |