From ce96a0e5272d6bcdf732dd0fc1ff8a9d9c834a0c Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Wed, 03 Jun 2026 15:00:58 +0800
Subject: [PATCH] Fix Round 4 model download QA issues

---
 privatevoice.src/internal/model/downloader.go |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/privatevoice.src/internal/model/downloader.go b/privatevoice.src/internal/model/downloader.go
index 7aa9c25..e56e2cb 100755
--- a/privatevoice.src/internal/model/downloader.go
+++ b/privatevoice.src/internal/model/downloader.go
@@ -27,6 +27,7 @@
 	if err := os.MkdirAll(modelsDir, 0755); err != nil {
 		return fmt.Errorf("failed to create models dir: %w", err)
 	}
+	cleanupStaleDownloadDirs(profile, modelsDir)
 
 	var lastErr error
 	for i, url := range urls {
@@ -52,6 +53,13 @@
 	return fmt.Errorf("download failed: %w", lastErr)
 }
 
+func cleanupStaleDownloadDirs(profile ModelProfile, modelsDir string) {
+	downloadRoot := filepath.Join(modelsDir, ".downloads", profile.ID)
+	if err := os.RemoveAll(downloadRoot); err != nil {
+		logger.Info("Failed to remove stale download dir %s: %v", downloadRoot, err)
+	}
+}
+
 func downloadAndInstallFromURL(profile ModelProfile, url, modelsDir string, attempt int, progress ProgressCallback) error {
 	runID := fmt.Sprintf("%d-%d", time.Now().UnixNano(), attempt)
 	downloadDir := filepath.Join(modelsDir, ".downloads", profile.ID, runID)

--
Gitblit v1.9.3