Browse Source

Merge pull request #5705 from dhiltgen/win_errormode

Enable windows error dialog for subprocess
Daniel Hiltgen 9 months ago
parent
commit
e8a66680d1
6 changed files with 32 additions and 2 deletions
  1. 4 0
      llm/ext_server/server.cpp
  2. 3 0
      llm/llm_darwin_amd64.go
  3. 3 0
      llm/llm_darwin_arm64.go
  4. 6 1
      llm/llm_linux.go
  5. 15 1
      llm/llm_windows.go
  6. 1 0
      llm/server.go

+ 4 - 0
llm/ext_server/server.cpp

@@ -41,6 +41,7 @@
 
 
 #if defined(_WIN32)
 #if defined(_WIN32)
 #include <windows.h>
 #include <windows.h>
+#include <errhandlingapi.h>
 #endif
 #endif
 
 
 #include <cstddef>
 #include <cstddef>
@@ -2737,6 +2738,9 @@ int wmain(int argc, wchar_t **wargv) {
     for (int i = 0; i < argc; ++i) {
     for (int i = 0; i < argc; ++i) {
         argv[i] = wchar_to_char(wargv[i]);
         argv[i] = wchar_to_char(wargv[i]);
     }
     }
+
+    // Adjust error mode to avoid error dialog after we start.
+    SetErrorMode(SEM_FAILCRITICALERRORS);
 #else
 #else
 int main(int argc, char **argv) {
 int main(int argc, char **argv) {
 #endif
 #endif

+ 3 - 0
llm/llm_darwin_amd64.go

@@ -2,7 +2,10 @@ package llm
 
 
 import (
 import (
 	"embed"
 	"embed"
+	"syscall"
 )
 )
 
 
 //go:embed build/darwin/x86_64/*/bin/*
 //go:embed build/darwin/x86_64/*/bin/*
 var libEmbed embed.FS
 var libEmbed embed.FS
+
+var LlamaServerSysProcAttr = &syscall.SysProcAttr{}

+ 3 - 0
llm/llm_darwin_arm64.go

@@ -2,7 +2,10 @@ package llm
 
 
 import (
 import (
 	"embed"
 	"embed"
+	"syscall"
 )
 )
 
 
 //go:embed build/darwin/arm64/*/bin/*
 //go:embed build/darwin/arm64/*/bin/*
 var libEmbed embed.FS
 var libEmbed embed.FS
+
+var LlamaServerSysProcAttr = &syscall.SysProcAttr{}

+ 6 - 1
llm/llm_linux.go

@@ -1,6 +1,11 @@
 package llm
 package llm
 
 
-import "embed"
+import (
+	"embed"
+	"syscall"
+)
 
 
 //go:embed build/linux/*/*/bin/*
 //go:embed build/linux/*/*/bin/*
 var libEmbed embed.FS
 var libEmbed embed.FS
+
+var LlamaServerSysProcAttr = &syscall.SysProcAttr{}

+ 15 - 1
llm/llm_windows.go

@@ -1,6 +1,20 @@
 package llm
 package llm
 
 
-import "embed"
+import (
+	"embed"
+	"syscall"
+)
 
 
 // unused on windows
 // unused on windows
 var libEmbed embed.FS
 var libEmbed embed.FS
+
+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,
+}

+ 1 - 0
llm/server.go

@@ -346,6 +346,7 @@ func NewLlamaServer(gpus gpu.GpuInfoList, model string, ggml *GGML, adapters, pr
 		s.cmd.Env = os.Environ()
 		s.cmd.Env = os.Environ()
 		s.cmd.Stdout = os.Stdout
 		s.cmd.Stdout = os.Stdout
 		s.cmd.Stderr = s.status
 		s.cmd.Stderr = s.status
+		s.cmd.SysProcAttr = LlamaServerSysProcAttr
 
 
 		envWorkarounds := [][2]string{}
 		envWorkarounds := [][2]string{}
 		for _, gpu := range gpus {
 		for _, gpu := range gpus {