Enable windows error dialog for subprocess
@@ -41,6 +41,7 @@
#if defined(_WIN32)
#include <windows.h>
+#include <errhandlingapi.h>
#endif
#include <cstddef>
@@ -2737,6 +2738,9 @@ int wmain(int argc, wchar_t **wargv) {
for (int i = 0; i < argc; ++i) {
argv[i] = wchar_to_char(wargv[i]);
}
+
+ // Adjust error mode to avoid error dialog after we start.
+ SetErrorMode(SEM_FAILCRITICALERRORS);
#else
int main(int argc, char **argv) {
@@ -2,7 +2,10 @@ package llm
import (
"embed"
+ "syscall"
)
//go:embed build/darwin/x86_64/*/bin/*
var libEmbed embed.FS
+var LlamaServerSysProcAttr = &syscall.SysProcAttr{}
//go:embed build/darwin/arm64/*/bin/*
@@ -1,6 +1,11 @@
package llm
-import "embed"
+import (
+ "embed"
+)
//go:embed build/linux/*/*/bin/*
@@ -1,6 +1,20 @@
// unused on windows
+const CREATE_DEFAULT_ERROR_MODE = 0x04000000
+var LlamaServerSysProcAttr = &syscall.SysProcAttr{
+ // Wire up the default error handling logic If for some reason a DLL is
+ // missing in the path this will pop up a GUI Dialog explaining the fault so
+ // the user can either fix their PATH, or report a bug. Without this
+ // setting, the process exits immediately with a generic exit status but no
+ // way to (easily) figure out what the actual missing DLL was.
+ CreationFlags: CREATE_DEFAULT_ERROR_MODE,
+}
@@ -346,6 +346,7 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr
s.cmd.Env = os.Environ()
s.cmd.Stdout = os.Stdout
s.cmd.Stderr = s.status
+ s.cmd.SysProcAttr = LlamaServerSysProcAttr
envWorkarounds := [][2]string{}
for _, gpu := range gpus {