Files
steipete--codexbar/Sources/CodexBarCore/Providers/MiniMax/MiniMaxUsageFetcher+ModelMapping.swift
T
2026-07-13 12:22:33 +08:00

63 lines
2.1 KiB
Swift

import Foundation
extension MiniMaxUsageParser {
static func mapModelNameToServiceType(modelName: String) -> String {
let lower = modelName.trimmingCharacters(in: .whitespacesAndNewlines).lowercased()
if lower == "general" || lower == "video" {
return lower
}
// Legacy text model names are separate from Token Plan's `general` bucket.
if self.isTextGenerationModelName(modelName) {
return "Text Generation"
}
// Text to Speech (语音合成): speech-hd, Speech 2.8, etc.
if lower.contains("speech") {
return "Text to Speech"
}
// Image to Video Fast (图生视频 Fast): Hailuo-2.3-Fast
if lower.contains("hailuo"), lower.contains("fast") {
return "Image to Video"
}
// Text to Video (文生视频): Hailuo-2.3 (non-Fast)
if lower.contains("hailuo") {
return "Text to Video"
}
// Image Generation (图像生成): image-01, image-02, etc.
if lower.hasPrefix("image-") {
return "Image Generation"
}
// Music Generation (音乐生成): music-2.5, etc.
if lower.contains("music") {
return "Music Generation"
}
return modelName
}
static func isTextGenerationModelName(_ modelName: String) -> Bool {
let lower = modelName.lowercased()
return lower == "general" || lower.contains("minimax-m") || lower.hasPrefix("m2.")
}
static func shouldRenderWeeklyWindow(for modelName: String) -> Bool {
self.isTextGenerationModelName(modelName)
}
static func formatMiniMaxDateTimeRange(startTime: Date?, endTime: Date?) -> String? {
guard let startTime, let endTime else { return nil }
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(identifier: "Asia/Shanghai")
formatter.dateFormat = "MM/dd HH:mm"
let start = formatter.string(from: startTime)
let end = formatter.string(from: endTime)
return "\(start) - \(end)(UTC+8)"
}
}