85 lines · 2.8 KB · Swift
RawDownload
import Foundation public struct MiniMaxUsageSnapshot: Sendable {    public let planName: String?    public let availablePrompts: Int?    public let currentPrompts: Int?    public let remainingPrompts: Int?    public let windowMinutes: Int?    public let usedPercent: Double?    public let resetsAt: Date?    public let updatedAt: Date     public init(        planName: String?,        availablePrompts: Int?,        currentPrompts: Int?,        remainingPrompts: Int?,        windowMinutes: Int?,        usedPercent: Double?,        resetsAt: Date?,        updatedAt: Date)    {        self.planName = planName        self.availablePrompts = availablePrompts        self.currentPrompts = currentPrompts        self.remainingPrompts = remainingPrompts        self.windowMinutes = windowMinutes        self.usedPercent = usedPercent        self.resetsAt = resetsAt        self.updatedAt = updatedAt    }} extension MiniMaxUsageSnapshot {    public func toUsageSnapshot() -> UsageSnapshot {        let used = max(0, min(100, self.usedPercent ?? 0))        let resetDescription = self.limitDescription()        let primary = RateWindow(            usedPercent: used,            windowMinutes: self.windowMinutes,            resetsAt: self.resetsAt,            resetDescription: resetDescription)         let planName = self.planName?.trimmingCharacters(in: .whitespacesAndNewlines)        let loginMethod = (planName?.isEmpty ?? true) ? nil : planName        let identity = ProviderIdentitySnapshot(            providerID: .minimax,            accountEmail: nil,            accountOrganization: nil,            loginMethod: loginMethod)         return UsageSnapshot(            primary: primary,            secondary: nil,            tertiary: nil,            providerCost: nil,            minimaxUsage: self,            updatedAt: self.updatedAt,            identity: identity)    }     private func limitDescription() -> String? {        guard let availablePrompts, availablePrompts > 0 else {            return self.windowDescription()        }         if let windowDescription = self.windowDescription() {            return "\(availablePrompts) prompts / \(windowDescription)"        }        return "\(availablePrompts) prompts"    }     private func windowDescription() -> String? {        guard let windowMinutes, windowMinutes > 0 else { return nil }        if windowMinutes % (24 * 60) == 0 {            let days = windowMinutes / (24 * 60)            return "\(days) \(days == 1 ? "day" : "days")"        }        if windowMinutes % 60 == 0 {            let hours = windowMinutes / 60            return "\(hours) \(hours == 1 ? "hour" : "hours")"        }        return "\(windowMinutes) \(windowMinutes == 1 ? "minute" : "minutes")"    }}