@@ -288,25 +288,31 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr
288
288
done : make (chan error , 1 ),
289
289
}
290
290
291
+ s .cmd .Env = os .Environ ()
291
292
s .cmd .Stdout = os .Stdout
292
293
s .cmd .Stderr = s .status
293
294
294
- if v := strings .Join (libraryPaths , string (filepath .ListSeparator )); v != "" {
295
- s .cmd .Env = append (s .cmd .Env , pathEnv + "=" + v )
295
+ visibleDevicesEnv , visibleDevicesEnvVal := gpu .GpuInfoList (gpus ).GetVisibleDevicesEnv ()
296
+ pathEnvVal := strings .Join (libraryPaths , string (filepath .ListSeparator ))
297
+
298
+ // Update or add the path and visible devices variable with our adjusted version
299
+ pathNeeded := true
300
+ devicesNeeded := visibleDevicesEnv != ""
301
+ for i := range s .cmd .Env {
302
+ cmp := strings .SplitN (s .cmd .Env [i ], "=" , 2 )
303
+ if strings .EqualFold (cmp [0 ], pathEnv ) {
304
+ s .cmd .Env [i ] = pathEnv + "=" + pathEnvVal
305
+ pathNeeded = false
306
+ } else if devicesNeeded && strings .EqualFold (cmp [0 ], visibleDevicesEnv ) {
307
+ s .cmd .Env [i ] = visibleDevicesEnv + "=" + visibleDevicesEnvVal
308
+ devicesNeeded = false
309
+ }
296
310
}
297
-
298
- if k , v := gpu .GpuInfoList (gpus ).GetVisibleDevicesEnv (); k != "" {
299
- s .cmd .Env = append (s .cmd .Env , k + "=" + v )
311
+ if pathNeeded {
312
+ s .cmd .Env = append (s .cmd .Env , pathEnv + "=" + pathEnvVal )
300
313
}
301
-
302
- for _ , ev := range os .Environ () {
303
- if strings .HasPrefix (ev , "CUDA_" ) ||
304
- strings .HasPrefix (ev , "ROCM_" ) ||
305
- strings .HasPrefix (ev , "HIP_" ) ||
306
- strings .HasPrefix (ev , "HSA_" ) ||
307
- strings .HasPrefix (ev , "GGML_" ) {
308
- s .cmd .Env = append (s .cmd .Env , ev )
309
- }
314
+ if devicesNeeded {
315
+ s .cmd .Env = append (s .cmd .Env , visibleDevicesEnv + "=" + visibleDevicesEnvVal )
310
316
}
311
317
312
318
slog .Info ("starting llama server" , "cmd" , s .cmd .String ())
0 commit comments