Files
kangkang/康康/Models/HealthExport.swift
link2026 b79ae54b7b ```
feat(iOS): 更新MNN后端模型配置优化性能

将MNN主模型从Qwen3.5-4B(~2.64GiB)降级为Qwen3.5-2B(~1.1GiB),因为4B版本
实测运行过慢,影响用户体验。iPhone17+/SME2设备使用2B模型,保留MLX
兜底方案用于模拟器和备用场景,确保AI推理性能和存储效率的平衡。
```
2026-06-09 22:20:07 +08:00

73 lines
2.7 KiB
Swift

import Foundation
import SwiftData
/// = HealthExport
///
/// Indicator/Report `[String]` ( SwiftData
/// ),,
///
/// @Model(Indicator/ChatTurn ):
/// default, `init`
@Model
final class HealthExport {
var prompt: String
var content: String
var createdAt: Date
// (§3.3 RAG ,W3 )
var referencedIndicatorIDs: [String]
var referencedReportIDs: [String]
var referencedSymptomIDs: [String]
var referencedDiaryIDs: [String]
// ,,
var inferredTimeFromDate: Date?
var inferredTimeToDate: Date?
var inferredIntent: String?
/// (), badge ;,
var inferredLabelCN: String?
// demo
/// tag, "Qwen3.5-2B-MNN"(iPhone17+ ) "Qwen3.5-2B-4bit"(MLX )
var modelTag: String
/// tok/s, demo #6 Live Activity
var decodeRate: Double
init(prompt: String = "",
content: String = "",
createdAt: Date = .now,
referencedIndicatorIDs: [String] = [],
referencedReportIDs: [String] = [],
referencedSymptomIDs: [String] = [],
referencedDiaryIDs: [String] = [],
inferredTimeFromDate: Date? = nil,
inferredTimeToDate: Date? = nil,
inferredIntent: String? = nil,
inferredLabelCN: String? = nil,
modelTag: String = "Qwen3.5-2B-MNN",
decodeRate: Double = 0) {
self.prompt = prompt
self.content = content
self.createdAt = createdAt
self.referencedIndicatorIDs = referencedIndicatorIDs
self.referencedReportIDs = referencedReportIDs
self.referencedSymptomIDs = referencedSymptomIDs
self.referencedDiaryIDs = referencedDiaryIDs
self.inferredTimeFromDate = inferredTimeFromDate
self.inferredTimeToDate = inferredTimeToDate
self.inferredIntent = inferredIntent
self.inferredLabelCN = inferredLabelCN
self.modelTag = modelTag
self.decodeRate = decodeRate
}
}
extension HealthExport {
/// / strip prompt ( 30 + ...)
var promptPreview: String {
let trimmed = prompt.trimmingCharacters(in: .whitespacesAndNewlines)
if trimmed.count <= 30 { return trimmed }
return trimmed.prefix(30) + ""
}
}