Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Mar 2026 22:58:09 +0000
From:      Yuri Victorovich <yuri@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 13825a9a521d - main - misc/ollama: add patches for: image generation hanging/timeout on slow CPUs, etc.
Message-ID:  <69c70b81.3cb10.7c6a2607@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=13825a9a521d20dff96d70bafdcb79472805314a

commit 13825a9a521d20dff96d70bafdcb79472805314a
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2026-03-27 13:34:02 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2026-03-27 22:58:07 +0000

    misc/ollama: add patches for: image generation hanging/timeout on slow CPUs, etc.
    
    Enable image gen via MLX - now your local llama can finally draw Beastie
    in sunglasses:
    
    $ ollama run x/z-image-turbo "FreeBSD Beastie in sunglasses drinking coffee at the beach"
---
 misc/ollama/Makefile                               |  2 +-
 .../files/patch-x_imagegen_models_zimage_vae.go    | 35 ++++++++++++++++++++++
 misc/ollama/files/patch-x_imagegen_server.go       | 26 ++++++++++++++++
 3 files changed, 62 insertions(+), 1 deletion(-)

diff --git a/misc/ollama/Makefile b/misc/ollama/Makefile
index f10ae5724905..e78c28f88d48 100644
--- a/misc/ollama/Makefile
+++ b/misc/ollama/Makefile
@@ -1,7 +1,7 @@
 PORTNAME=	ollama
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.18.3
-PORTREVISION=	1
+PORTREVISION=	2
 CATEGORIES=	misc # machine-learning
 
 MAINTAINER=	yuri@FreeBSD.org
diff --git a/misc/ollama/files/patch-x_imagegen_models_zimage_vae.go b/misc/ollama/files/patch-x_imagegen_models_zimage_vae.go
new file mode 100644
index 000000000000..0c9e990b52ba
--- /dev/null
+++ b/misc/ollama/files/patch-x_imagegen_models_zimage_vae.go
@@ -0,0 +1,35 @@
+--- x/imagegen/models/zimage/vae.go.orig	1979-11-30 00:00:00.000000000 -0800
++++ x/imagegen/models/zimage/vae.go
+@@ -332,6 +332,16 @@
+ 
+ // Forward applies the ResNet block with staged evaluation
+ func (rb *ResnetBlock2D) Forward(x *mlx.Array) *mlx.Array {
++	// Keep x alive across intermediate Eval calls (cleanup() would free it otherwise).
++	// The residual connection at the end needs the original x.
++	wasKept := x.Kept()
++	mlx.Keep(x)
++	defer func() {
++		if !wasKept {
++			x.Free()
++		}
++	}()
++
+ 	var h *mlx.Array
+ 
+ 	// Stage 1: norm1
+@@ -461,6 +471,15 @@
+ // Input and output are in NHWC format [B, H, W, C]
+ func (ab *VAEAttentionBlock) Forward(x *mlx.Array) *mlx.Array {
+ 	residual := x
++	// Keep residual alive across intermediate Eval calls.
++	// The residual addition at stage 3 needs the original input.
++	wasKept := residual.Kept()
++	mlx.Keep(residual)
++	defer func() {
++		if !wasKept {
++			residual.Free()
++		}
++	}()
+ 	shape := x.Shape()
+ 	B := shape[0]
+ 	H := shape[1]
diff --git a/misc/ollama/files/patch-x_imagegen_server.go b/misc/ollama/files/patch-x_imagegen_server.go
new file mode 100644
index 000000000000..a49851568dec
--- /dev/null
+++ b/misc/ollama/files/patch-x_imagegen_server.go
@@ -0,0 +1,26 @@
+-- same issue as first chunk: https://github.com/ollama/ollama/issues/15107
+
+--- x/imagegen/server.go.orig
++++ x/imagegen/server.go
+@@ -55,7 +55,9 @@
+ 	return &Server{
+ 		modelName: modelName,
+ 		done:      make(chan error, 1),
+-		client:    &http.Client{Timeout: 10 * time.Minute},
++		// No client-level timeout: image generation on CPU can take many minutes.
++		// Cancellation is handled via request context.
++		client: &http.Client{},
+ 	}, nil
+ }
+ 
+@@ -116,8 +118,8 @@
+ 	cmd := exec.Command(exe, "runner", "--imagegen-engine", "--model", s.modelName, "--port", strconv.Itoa(port))
+ 	cmd.Env = os.Environ()
+ 
+-	// On Linux, set LD_LIBRARY_PATH to include MLX library directories
+-	if runtime.GOOS == "linux" {
++	// On Linux and FreeBSD, set LD_LIBRARY_PATH to include MLX library directories
++	if runtime.GOOS == "linux" || runtime.GOOS == "freebsd" {
+ 		// Build library paths: start with LibOllamaPath, then add any mlx_* subdirectories
+ 		libraryPaths := []string{ml.LibOllamaPath}
+ 		if mlxDirs, err := filepath.Glob(filepath.Join(ml.LibOllamaPath, "mlx_*")); err == nil {


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69c70b81.3cb10.7c6a2607>