()
| 654 | } |
| 655 | |
| 656 | private func loadProviderState() { |
| 657 | self.selectedProviderID = SettingsStore.shared.selectedProviderID |
| 658 | self.updateCurrentProvider() |
| 659 | |
| 660 | self.enableDebugLogs = SettingsStore.shared.enableDebugLogs |
| 661 | self.availableModelsByProvider = SettingsStore.shared.availableModelsByProvider |
| 662 | self.selectedModelByProvider = SettingsStore.shared.selectedModelByProvider |
| 663 | self.providerAPIKeys = SettingsStore.shared.providerAPIKeys |
| 664 | self.savedProviders = SettingsStore.shared.savedProviders |
| 665 | |
| 666 | var normalized: [String: [String]] = [:] |
| 667 | for (key, models) in self.availableModelsByProvider { |
| 668 | let lower = key.lowercased() |
| 669 | let newKey = ModelRepository.shared.isBuiltIn(lower) ? lower : (key.hasPrefix("custom:") ? key : "custom:\(key)") |
| 670 | let clean = Array(Set(models.map { $0.trimmingCharacters(in: .whitespacesAndNewlines) })).sorted() |
| 671 | if !clean.isEmpty { |
| 672 | normalized[newKey] = clean |
| 673 | } |
| 674 | } |
| 675 | self.availableModelsByProvider = normalized |
| 676 | SettingsStore.shared.availableModelsByProvider = normalized |
| 677 | |
| 678 | var normalizedSel: [String: String] = [:] |
| 679 | for (key, model) in self.selectedModelByProvider { |
| 680 | let lower = key.lowercased() |
| 681 | let newKey = ModelRepository.shared.isBuiltIn(lower) ? lower : (key.hasPrefix("custom:") ? key : "custom:\(key)") |
| 682 | if let list = normalized[newKey], list.contains(model) { |
| 683 | normalizedSel[newKey] = model |
| 684 | } |
| 685 | } |
| 686 | self.selectedModelByProvider = normalizedSel |
| 687 | SettingsStore.shared.selectedModelByProvider = normalizedSel |
| 688 | |
| 689 | if let saved = savedProviders.first(where: { $0.id == selectedProviderID }) { |
| 690 | self.availableModels = saved.models |
| 691 | self.openAIBaseURL = saved.baseURL |
| 692 | } else if let stored = availableModelsByProvider[currentProvider], !stored.isEmpty { |
| 693 | self.availableModels = stored |
| 694 | } else { |
| 695 | self.availableModels = ModelRepository.shared.defaultModels(for: self.providerKey(for: self.selectedProviderID)) |
| 696 | } |
| 697 | |
| 698 | if let sel = selectedModelByProvider[currentProvider], availableModels.contains(sel) { |
| 699 | self.selectedModel = sel |
| 700 | } else if let first = availableModels.first { |
| 701 | self.selectedModel = first |
| 702 | } |
| 703 | } |
| 704 | |
| 705 | private func installShortcutCaptureMonitor() { |
| 706 | self.removeShortcutCaptureMonitor() |
no test coverage detected