package model import "fmt" const ( BackendSenseVoice = "sensevoice" ) var modelProfiles = map[string]ModelProfile{ DefaultModelID: { ID: DefaultModelID, DisplayName: "SenseVoice", BackendKind: BackendSenseVoice, Tier: "default", SupportedLanguageIDs: []string{ "zh-CN", "zh-Hans", "zh-Hant", "yue", "en", "ja", "ko", }, RecommendedFor: []string{"zh-CN"}, Description: "轻量中文模型,适合中文和中英混输。", InstallDirName: "sensevoice-zh", LegacyDirNames: []string{"sensevoice"}, RequiredFiles: []RequiredFileRule{ { Role: "model", AnyOf: []string{"model.int8.onnx", "model.onnx"}, Required: true, }, { Role: "tokens", AllOf: []string{"tokens.txt"}, Required: true, }, }, ProviderOrder: []string{"coreml", "cpu"}, NumThreads: 4, }, } var languageProfiles = map[string]LanguageProfile{ "zh-CN": { ID: "zh-CN", DisplayName: "中文", UILocale: "zh-CN", SystemMatchers: []string{"zh", "zh-CN", "zh-Hans", "zh-Hant"}, DefaultModelID: DefaultModelID, }, } func GetModelProfile(id string) (ModelProfile, error) { if id == "" { id = DefaultModelID } profile, ok := modelProfiles[id] if !ok { return ModelProfile{}, fmt.Errorf("unknown model profile: %s", id) } return profile, nil } func DefaultModelProfile() ModelProfile { return modelProfiles[DefaultModelID] } func ListModelProfiles() []ModelProfile { profiles := make([]ModelProfile, 0, len(modelProfiles)) for _, profile := range modelProfiles { profiles = append(profiles, profile) } return profiles } func NormalizeModelID(id string) string { if _, err := GetModelProfile(id); err != nil { return DefaultModelID } return id } func GetLanguageProfile(id string) (LanguageProfile, error) { profile, ok := languageProfiles[id] if !ok { return LanguageProfile{}, fmt.Errorf("unknown language profile: %s", id) } return profile, nil } func ListLanguageProfiles() []LanguageProfile { profiles := make([]LanguageProfile, 0, len(languageProfiles)) for _, profile := range languageProfiles { profiles = append(profiles, profile) } return profiles }