From 88236bc05fc1dbc251abfaf47105ab8d77c4e7e0 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Thu, 30 Oct 2025 13:22:00 -0700 Subject: [PATCH] win: use copy for subprocess logs (#12864) windows gets confused when we try to hand the stderr file descriptor to the subprocess children. This ensures the log output always shows up. --- llm/server.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/llm/server.go b/llm/server.go index f8b232dfb3..4f7c3760d9 100644 --- a/llm/server.go +++ b/llm/server.go @@ -339,8 +339,23 @@ func StartRunner(ollamaEngine bool, modelPath string, gpuLibs []string, out io.W cmd = exec.Command(exe, params...) cmd.Env = os.Environ() - cmd.Stdout = out - cmd.Stderr = out + + if out != nil { + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, 0, fmt.Errorf("failed to spawn server stdout pipe: %w", err) + } + stderr, err := cmd.StderrPipe() + if err != nil { + return nil, 0, fmt.Errorf("failed to spawn server stderr pipe: %w", err) + } + go func() { + io.Copy(out, stdout) //nolint:errcheck + }() + go func() { + io.Copy(out, stderr) //nolint:errcheck + }() + } cmd.SysProcAttr = LlamaServerSysProcAttr // Always filter down the set of GPUs in case there are any unsupported devices that might crash