[update] update last model usage

This commit is contained in:
游薪渝(揽清) 2025-09-03 19:25:49 +08:00
parent 16c8b58550
commit cc5ebaf797
2 changed files with 47 additions and 0 deletions

View File

@ -196,6 +196,9 @@ final class LLMChatViewModel: ObservableObject {
NotificationCenter.default.post(name: .dismissKeyboard, object: nil) NotificationCenter.default.post(name: .dismissKeyboard, object: nil)
self.send(draft: draft, userType: .user) self.send(draft: draft, userType: .user)
recordModelUsage()
if isModelLoaded { if isModelLoaded {
if modelInfo.modelName.lowercased().contains("diffusion") { if modelInfo.modelName.lowercased().contains("diffusion") {
self.getDiffusionResponse(draft: draft) self.getDiffusionResponse(draft: draft)
@ -390,9 +393,14 @@ final class LLMChatViewModel: ObservableObject {
interactor.connect() interactor.connect()
self.setupLLM(modelPath: self.modelInfo.localPath) self.setupLLM(modelPath: self.modelInfo.localPath)
recordModelUsage()
} }
func onStop() { func onStop() {
recordModelUsage()
ChatHistoryManager.shared.saveChat( ChatHistoryManager.shared.saveChat(
historyId: historyId, historyId: historyId,
modelInfo: modelInfo, modelInfo: modelInfo,
@ -419,4 +427,14 @@ final class LLMChatViewModel: ObservableObject {
.sink { _ in } .sink { _ in }
.store(in: &subscriptions) .store(in: &subscriptions)
} }
private func recordModelUsage() {
ModelStorageManager.shared.updateLastUsed(for: modelInfo.modelName)
NotificationCenter.default.post(
name: .modelUsageUpdated,
object: nil,
userInfo: ["modelName": modelInfo.modelName]
)
}
} }

View File

@ -7,6 +7,7 @@
import Foundation import Foundation
import SwiftUI import SwiftUI
import Combine
class ModelListViewModel: ObservableObject { class ModelListViewModel: ObservableObject {
// MARK: - Published Properties // MARK: - Published Properties
@ -23,6 +24,7 @@ class ModelListViewModel: ObservableObject {
// MARK: - Private Properties // MARK: - Private Properties
private let modelClient = ModelClient.shared private let modelClient = ModelClient.shared
private let pinnedModelKey = "com.mnnllm.pinnedModelIds" private let pinnedModelKey = "com.mnnllm.pinnedModelIds"
private var cancellables = Set<AnyCancellable>()
// MARK: - Model Data Access // MARK: - Model Data Access
@ -49,6 +51,17 @@ class ModelListViewModel: ObservableObject {
Task { @MainActor in Task { @MainActor in
await fetchModels() await fetchModels()
} }
NotificationCenter.default
.publisher(for: .modelUsageUpdated)
.sink { [weak self] notification in
if let modelName = notification.userInfo?["modelName"] as? String {
Task { @MainActor in
self?.updateModelLastUsed(modelName: modelName)
}
}
}
.store(in: &cancellables)
} }
// MARK: - Model Data Management // MARK: - Model Data Management
@ -490,4 +503,20 @@ class ModelListViewModel: ObservableObject {
} }
} }
} }
@MainActor
private func updateModelLastUsed(modelName: String) {
if let index = models.firstIndex(where: { $0.modelName == modelName }) {
if let lastUsed = ModelStorageManager.shared.getLastUsed(for: modelName) {
models[index].lastUsedAt = lastUsed
sortModels(fetchedModels: &models)
}
}
}
}
// MARK: - Notification Names
extension Notification.Name {
static let modelUsageUpdated = Notification.Name("modelUsageUpdated")
} }