HuggingChat-Mac/Views/StatusIndicatorView.swift (55 lines of code) (raw):
//
// StatusIndicatorView.swift
// HuggingChat-Mac
//
// Created by Cyril Zakka on 8/27/24.
//
import SwiftUI
import WhisperKit
struct StatusIndicatorView: View {
var status: LoadState?
var audioState: ModelState?
var body: some View {
Circle()
.fill(statusColor)
.frame(width: 10, height: 10)
.help(Text(helpText))
}
private var statusColor: Color {
if let status = status {
switch status {
case .error(_):
return .red
case .idle:
return .gray
case .loaded:
return .green
}
}
else if let audioState = audioState {
switch audioState {
case .unloading, .unloaded:
return .gray
case .loading, .downloading, .prewarmed, .downloaded:
return .gray
case .loaded:
return .green
case .prewarming:
return .orange
}
}
return .gray
}
private var helpText: String {
if let status = status {
switch status {
case .error(let error):
return "Error: \(error)"
case .idle:
return "No model selected"
case .loaded(_):
return "Model is ready for use."
}
}
else if let audioState = audioState {
return "Audio model state: \(audioState.description)"
}
return "Unknown state" // Default text if both status and audioState are nil
}
}
#Preview {
// StatusIndicatorView(status: .noModel)
}