Merge pull request #1785 from dhiltgen/win_native_cli
Load dynamic cpu lib on windows
This commit is contained in:
commit
b5939008a1
4 changed files with 16 additions and 8 deletions
|
@ -1,8 +1,6 @@
|
||||||
package llm
|
package llm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/jmorganca/ollama/api"
|
"github.com/jmorganca/ollama/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -10,6 +8,5 @@ func newDefaultExtServer(model string, adapters, projectors []string, numLayers
|
||||||
// On windows we always load the llama.cpp libraries dynamically to avoid startup DLL dependencies
|
// On windows we always load the llama.cpp libraries dynamically to avoid startup DLL dependencies
|
||||||
// This ensures we can update the PATH at runtime to get everything loaded
|
// This ensures we can update the PATH at runtime to get everything loaded
|
||||||
|
|
||||||
// Should not happen
|
return newDynamicShimExtServer(AvailableShims["cpu"], model, adapters, projectors, numLayers, opts)
|
||||||
return nil, fmt.Errorf("no default impl on windows - all dynamic")
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,9 @@ function install {
|
||||||
md "${script:buildDir}/lib" -ea 0 > $null
|
md "${script:buildDir}/lib" -ea 0 > $null
|
||||||
cp "${script:buildDir}/bin/${script:config}/ext_server_shared.dll" "${script:buildDir}/lib"
|
cp "${script:buildDir}/bin/${script:config}/ext_server_shared.dll" "${script:buildDir}/lib"
|
||||||
cp "${script:buildDir}/bin/${script:config}/llama.dll" "${script:buildDir}/lib"
|
cp "${script:buildDir}/bin/${script:config}/llama.dll" "${script:buildDir}/lib"
|
||||||
|
|
||||||
|
# Display the dll dependencies in the build log
|
||||||
|
dumpbin /dependents "${script:buildDir}/bin/${script:config}/ext_server_shared.dll" | select-string ".dll"
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanup {
|
function cleanup {
|
||||||
|
|
|
@ -87,7 +87,8 @@ func newLlmServer(library, model string, adapters, projectors []string, numLayer
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return srv, nil
|
return srv, nil
|
||||||
}
|
}
|
||||||
log.Printf("Failed to load dynamic library - falling back to CPU mode %s", err)
|
log.Printf("Failed to load dynamic library %s - falling back to CPU mode %s", library, err)
|
||||||
|
// TODO - update some state to indicate we were unable to load the GPU library for future "info" ux
|
||||||
}
|
}
|
||||||
|
|
||||||
return newDefaultExtServer(model, adapters, projectors, numLayers, opts)
|
return newDefaultExtServer(model, adapters, projectors, numLayers, opts)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"embed"
|
"embed"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -11,14 +12,20 @@ import (
|
||||||
var libEmbed embed.FS
|
var libEmbed embed.FS
|
||||||
|
|
||||||
func updatePath(dir string) {
|
func updatePath(dir string) {
|
||||||
|
tmpDir := filepath.Dir(dir)
|
||||||
pathComponents := strings.Split(os.Getenv("PATH"), ";")
|
pathComponents := strings.Split(os.Getenv("PATH"), ";")
|
||||||
|
i := 0
|
||||||
for _, comp := range pathComponents {
|
for _, comp := range pathComponents {
|
||||||
// Case incensitive
|
if strings.EqualFold(comp, dir) {
|
||||||
if strings.ToLower(comp) == strings.ToLower(dir) {
|
|
||||||
return
|
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(pathComponents, dir), ";")
|
}
|
||||||
|
newPath := strings.Join(append([]string{dir}, pathComponents...), ";")
|
||||||
log.Printf("Updating PATH to %s", newPath)
|
log.Printf("Updating PATH to %s", newPath)
|
||||||
os.Setenv("PATH", newPath)
|
os.Setenv("PATH", newPath)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue