ggufwritekv
This commit is contained in:
parent
3d0fd31f0e
commit
d7c8d4f3f4
58
llm/gguf.go
58
llm/gguf.go
@ -6,6 +6,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log/slog"
|
||||||
"slices"
|
"slices"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
@ -637,7 +638,7 @@ func (llm *gguf) Encode(ws io.WriteSeeker, kv KV, tensors []Tensor) error {
|
|||||||
|
|
||||||
for k, v := range kvCheck {
|
for k, v := range kvCheck {
|
||||||
if !v {
|
if !v {
|
||||||
return fmt.Errorf("Didn't know how to write kv %s", k)
|
return fmt.Errorf("didn't know how to write kv %s", k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,6 +770,57 @@ func ggufWriteTensorInfo(io.Writer, *Tensor) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ggufWriteKV(io.Writer, string, any) error {
|
func ggufWriteKV(ws io.WriteSeeker, k string, v any) error {
|
||||||
return nil
|
slog.Debug(k, "type", fmt.Sprintf("%T", v))
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, uint64(len(k))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, []byte(k)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
switch v := v.(type) {
|
||||||
|
case uint32:
|
||||||
|
err = writeGGUF(ws, ggufTypeUint32, v)
|
||||||
|
case float32:
|
||||||
|
err = writeGGUF(ws, ggufTypeFloat32, v)
|
||||||
|
case bool:
|
||||||
|
err = writeGGUF(ws, ggufTypeBool, v)
|
||||||
|
case string:
|
||||||
|
err = writeGGUFString(ws, v)
|
||||||
|
case []int32:
|
||||||
|
err = writeGGUFArray(ws, ggufTypeInt32, v)
|
||||||
|
case []uint32:
|
||||||
|
err = writeGGUFArray(ws, ggufTypeUint32, v)
|
||||||
|
case []float32:
|
||||||
|
err = writeGGUFArray(ws, ggufTypeFloat32, v)
|
||||||
|
case []string:
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, ggufTypeArray); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, ggufTypeString); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, uint64(len(v))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range v {
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, uint64(len(e))); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := binary.Write(ws, binary.LittleEndian, []byte(e)); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("improper type for '%s'", k)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user