| | |
| | | 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 { |
| | |
| | | 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) |