From 084929c29318c6a6604f1b01eb0a782cb31242ba Mon Sep 17 00:00:00 2001 From: Patrick Devine Date: Mon, 28 Oct 2024 13:51:19 -0700 Subject: [PATCH] add mllama image processing to the generate handler (#7384) --- server/routes.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/server/routes.go b/server/routes.go index 7aff9235..eb2268c7 100644 --- a/server/routes.go +++ b/server/routes.go @@ -4,6 +4,7 @@ import ( "bytes" "cmp" "context" + "encoding/binary" "encoding/json" "errors" "fmt" @@ -33,6 +34,7 @@ import ( "github.com/ollama/ollama/openai" "github.com/ollama/ollama/parser" "github.com/ollama/ollama/runners" + "github.com/ollama/ollama/server/imageproc" "github.com/ollama/ollama/template" "github.com/ollama/ollama/types/errtypes" "github.com/ollama/ollama/types/model" @@ -189,7 +191,24 @@ func (s *Server) GenerateHandler(c *gin.Context) { images := make([]llm.ImageData, len(req.Images)) for i := range req.Images { - images[i] = llm.ImageData{ID: i, Data: req.Images[i]} + if isMllama { + data, aspectRatioID, err := imageproc.Preprocess(req.Images[i]) + if err != nil { + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "error processing image"}) + return + } + + buf := new(bytes.Buffer) + err = binary.Write(buf, binary.LittleEndian, data) + if err != nil { + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "error processing image"}) + return + } + + images[i] = llm.ImageData{Data: buf.Bytes(), AspectRatioID: aspectRatioID} + } else { + images[i] = llm.ImageData{ID: i, Data: req.Images[i]} + } } prompt := req.Prompt