63 lines
2.1 KiB
Swift
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)"
|
|
}
|
|
}
|