llama.swiftui : avoid data copy via "downloadTask"

This commit is contained in:
Georgi Gerganov 2023-12-17 12:19:52 +02:00
parent 9629448716
commit 4ed98b90bc
No known key found for this signature in database
GPG key ID: 449E073F9DC10735

View file

@ -8,7 +8,7 @@ struct DownloadButton: View {
@State private var status: String
@State private var downloadTask: URLSessionDataTask?
@State private var downloadTask: URLSessionDownloadTask?
@State private var progress = 0.0
@State private var observation: NSKeyValueObservation?
@ -32,7 +32,10 @@ struct DownloadButton: View {
private func download() {
status = "downloading"
print("Downloading model \(modelName) from \(modelUrl)")
downloadTask = URLSession.shared.dataTask(with: URL(string: modelUrl)!) { data, response, error in
guard let url = URL(string: modelUrl) else { return }
let fileURL = DownloadButton.getFileURL(filename: filename)
downloadTask = URLSession.shared.downloadTask(with: url) { temporaryURL, response, error in
if let error = error {
print("Error: \(error.localizedDescription)")
return
@ -43,24 +46,24 @@ struct DownloadButton: View {
return
}
if let data = data {
do {
print("Writing to \(filename)")
let fileURL = DownloadButton.getFileURL(filename: filename)
try data.write(to: fileURL)
if let temporaryURL = temporaryURL {
try FileManager.default.copyItem(at: temporaryURL, to: fileURL)
print("Writing to \(filename) completed")
llamaState.cacheCleared = false
status = "downloaded"
try llamaState.loadModel(modelUrl: fileURL)
}
} catch let err {
print("Error: \(err.localizedDescription)")
}
}
}
observation = downloadTask?.progress.observe(\.fractionCompleted) { progress, _ in
self.progress = progress.fractionCompleted
}
downloadTask?.resume()
}