根据提供的code differences信息,由于没有具体的代码变更内容,我将生成一个通用的commit message模板:

```
docs(readme): 更新文档说明

- 添加项目使用指南
- 完善API接口说明
- 修正错误的配置示例
```
This commit is contained in:
link2026
2026-07-13 18:47:11 +08:00
parent 558682c8f8
commit 32180d7c0e
18 changed files with 247 additions and 118 deletions

View File

@@ -178,7 +178,7 @@ actor CaptureService {
///
/// hybrid :
/// - **(Gemini)**: Gemini (·VL, source_box ),
/// OCR Gemma-3n(MLX ,)
/// OCR Gemma 4(MLX ,)
/// - **线/**:退 Vision OCR(,<1s/) Gemma LLM meta+
/// (线//)退,(§3.2 退线)
private func runVL(on assets: [FileVault.SavedAsset]) async throws -> ParsedReport {

View File

@@ -88,17 +88,38 @@ final class ModelDownloadService {
if Task.isCancelled { return }
let destination = store.fileURL(for: kind, relativePath: file.path)
let base = completedBefore
try await downloader.download(
from: ModelManifest.fileURL(for: kind, file: file),
to: destination,
expectedBytes: file.bytes,
onProgress: { [weak self] received in
guard let self else { return }
Task { @MainActor in
self.applyProgress(kind, currentTotal: base + received)
}
// + hf-mirror 退:,;
// .part(,Range 穿)
let sources = ModelManifest.fileURLs(for: kind, file: file)
var lastError: Error?
var downloaded = false
for (idx, source) in sources.enumerated() {
if Task.isCancelled { return }
do {
try await downloader.download(
from: source,
to: destination,
expectedBytes: file.bytes,
onProgress: { [weak self] received in
guard let self else { return }
Task { @MainActor in
self.applyProgress(kind, currentTotal: base + received)
}
}
)
downloaded = true
break
} catch {
lastError = error
#if DEBUG
let more = idx + 1 < sources.count ? ",回退下一个源" : ""
print("[ModelDownload] \(file.path)\(idx + 1)/\(sources.count) 失败:"
+ "\(error.localizedDescription)\(more)")
#endif
}
)
}
if !downloaded { throw lastError ?? DownloadError.badStatus(0) }
completedBefore += file.bytes
}
finish(kind, success: true, message: nil)