Files
kangkang/康康/Models/HealthExport.swift
link2026 06484d09ff feat(AI): LLM 迁移到 mlx-swift-lm 2.31.3 + Qwen3.5-2B
将 SPM 依赖从 mlx-swift-examples 2.29.1 迁到改名延续仓库 mlx-swift-lm
2.31.3(含 qwen3_5 架构、旧 loadContainer API 兼容),文本 LLM 由
Qwen3-1.7B 换为 Qwen3.5-2B-4bit(走 qwen3_5→Qwen35Model 文本路径)。
连带 mlx-swift 0.29.1→0.31.4,顺修弃用 API:
- MLX.GPU.clearCache() → MLX.Memory.clearCache()
- MLX.GPU.set(cacheLimit:) → MLX.Memory.cacheLimit

更新 ModelManifest(.llm 文件清单+精确字节数,~1.63GiB)、ModelManifestTests、
HealthExport.modelTag 默认值。App BUILD SUCCEEDED + ModelManifestTests 通过。

保留作 MNN 改造的 GPU 兜底基线。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 18:00:28 +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-4bit"
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-4bit",
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) + ""
}
}