"docs/backend/hyperparameter_tuning.md" did not exist on "a5e0defb5a560a6d42882008c1dd8a739002ab7d"
assets.go 1.28 KB
Newer Older
Daniel Hiltgen's avatar
Daniel Hiltgen committed
1
2
3
4
5
6
7
8
9
package gpu

import (
	"fmt"
	"log/slog"
	"os"
	"path/filepath"
	"runtime"
	"strings"
10
11
	"sync"
)
Daniel Hiltgen's avatar
Daniel Hiltgen committed
12

13
14
15
var (
	lock        sync.Mutex
	payloadsDir = ""
Daniel Hiltgen's avatar
Daniel Hiltgen committed
16
17
)

18
19
20
21
22
23
24
25
26
func PayloadsDir() (string, error) {
	lock.Lock()
	defer lock.Unlock()
	if payloadsDir == "" {
		tmpDir, err := os.MkdirTemp("", "ollama")
		if err != nil {
			return "", fmt.Errorf("failed to generate tmp dir: %w", err)
		}
		payloadsDir = tmpDir
Daniel Hiltgen's avatar
Daniel Hiltgen committed
27
	}
28
29
30
31
32
33
34
35
36
37
38
	return payloadsDir, nil
}

func Cleanup() {
	lock.Lock()
	defer lock.Unlock()
	if payloadsDir != "" {
		slog.Debug("cleaning up payloads dir " + payloadsDir)
		err := os.RemoveAll(payloadsDir)
		if err != nil {
			slog.Warn(fmt.Sprintf("failed to cleanup tmp dir: %s", err))
Daniel Hiltgen's avatar
Daniel Hiltgen committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
		}
	}
}

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
}