123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package gpu
- import (
- "fmt"
- "log/slog"
- "os"
- "path/filepath"
- "runtime"
- "strings"
- "github.com/jmorganca/ollama/version"
- )
- func AssetsDir() (string, error) {
- home, err := os.UserHomeDir()
- if err != nil {
- return "", err
- }
- baseDir := filepath.Join(home, ".ollama", "assets")
- libDirs, err := os.ReadDir(baseDir)
- if err == nil {
- for _, d := range libDirs {
- if d.Name() == version.Version {
- continue
- }
- // Special case the rocm dependencies, which are handled by the installer
- if d.Name() == "rocm" {
- continue
- }
- slog.Debug("stale lib detected, cleaning up " + d.Name())
- err = os.RemoveAll(filepath.Join(baseDir, d.Name()))
- if err != nil {
- slog.Warn(fmt.Sprintf("unable to clean up stale library %s: %s", filepath.Join(baseDir, d.Name()), err))
- }
- }
- }
- return filepath.Join(baseDir, version.Version), nil
- }
- func UpdatePath(dir string) {
- if runtime.GOOS == "windows" {
- tmpDir := filepath.Dir(dir)
- pathComponents := strings.Split(os.Getenv("PATH"), ";")
- i := 0
- for _, comp := range pathComponents {
- if strings.EqualFold(comp, dir) {
- return
- }
- // Remove any other prior paths to our temp dir
- if !strings.HasPrefix(strings.ToLower(comp), strings.ToLower(tmpDir)) {
- pathComponents[i] = comp
- i++
- }
- }
- newPath := strings.Join(append([]string{dir}, pathComponents...), ";")
- slog.Info(fmt.Sprintf("Updating PATH to %s", newPath))
- os.Setenv("PATH", newPath)
- }
- // linux and darwin rely on rpath
- }
|