From cf57246aba0faeda118ecd39dd72420db5849bf7 Mon Sep 17 00:00:00 2001 From: Josh Yan Date: Fri, 12 Jul 2024 12:59:51 -0700 Subject: [PATCH] write --- llm/gguf.go | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/llm/gguf.go b/llm/gguf.go index 9d4beef2f..5c4112538 100644 --- a/llm/gguf.go +++ b/llm/gguf.go @@ -762,12 +762,45 @@ func (gguf GGUFWriter) WriteTo(w io.Writer) (int64, error) { return 0, nil } -func ggufWriteTensor(io.Writer, *Tensor, int64) error { - return nil +func ggufWriteTensorInfo(ws io.Writer, t *Tensor, alignment int64) error { + if err := binary.Write(ws, binary.LittleEndian, uint64(len(t.Name))); err != nil { + return err + } + + if err := binary.Write(ws, binary.LittleEndian, []byte(t.Name)); err != nil { + return err + } + + if err := binary.Write(ws, binary.LittleEndian, uint32(len(t.Shape))); err != nil { + return err + } + + for i := range len(t.Shape) { + if err := binary.Write(ws, binary.LittleEndian, t.Shape[len(t.Shape)-i-1]); err != nil { + return err + } + } + + if err := binary.Write(ws, binary.LittleEndian, t.Kind); err != nil { + return err + } + + return binary.Write(ws, binary.LittleEndian, t.Offset) } -func ggufWriteTensorInfo(io.Writer, *Tensor) error { - return nil +func ggufWriteTensor(ws io.Writer, t *Tensor, alignment int64) error { + slog.Debug(t.Name, "kind", t.Kind, "shape", t.Shape, "offset", t.Offset) + offset, err := ws.Seek(0, io.SeekCurrent) + if err != nil { + return err + } + + if err := binary.Write(ws, binary.LittleEndian, bytes.Repeat([]byte{0}, int(ggufPadding(offset, alignment)))); err != nil { + return err + } + + _, err = t.WriteTo(ws) + return err } func ggufWriteKV(ws io.WriteSeeker, k string, v any) error {