Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
ollama
Commits
f5f245cc
Unverified
Commit
f5f245cc
authored
Jun 10, 2024
by
Michael Yang
Committed by
GitHub
Jun 10, 2024
Browse files
Merge pull request #4938 from ollama/mxyng/fix-byte-order
fix parsing big endian gguf
parents
94d37fdc
620d5c56
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
9 deletions
+19
-9
llm/ggml.go
llm/ggml.go
+5
-8
llm/gguf.go
llm/gguf.go
+14
-1
No files found.
llm/ggml.go
View file @
f5f245cc
...
@@ -231,8 +231,7 @@ const (
...
@@ -231,8 +231,7 @@ const (
// Magic constant for `ggla` files (LoRA adapter).
// Magic constant for `ggla` files (LoRA adapter).
FILE_MAGIC_GGLA
=
0x67676C61
FILE_MAGIC_GGLA
=
0x67676C61
// Magic constant for `gguf` files (versioned, gguf)
// Magic constant for `gguf` files (versioned, gguf)
FILE_MAGIC_GGUF_LE
=
0x46554747
FILE_MAGIC_GGUF
=
0x46554747
FILE_MAGIC_GGUF_BE
=
0x47475546
)
)
var
ErrUnsupportedFormat
=
errors
.
New
(
"unsupported model format"
)
var
ErrUnsupportedFormat
=
errors
.
New
(
"unsupported model format"
)
...
@@ -247,7 +246,7 @@ func DetectGGMLType(b []byte) string {
...
@@ -247,7 +246,7 @@ func DetectGGMLType(b []byte) string {
return
"ggjt"
return
"ggjt"
case
FILE_MAGIC_GGLA
:
case
FILE_MAGIC_GGLA
:
return
"ggla"
return
"ggla"
case
FILE_MAGIC_GGUF
_LE
,
FILE_MAGIC_GGUF_BE
:
case
FILE_MAGIC_GGUF
:
return
"gguf"
return
"gguf"
default
:
default
:
return
""
return
""
...
@@ -255,21 +254,19 @@ func DetectGGMLType(b []byte) string {
...
@@ -255,21 +254,19 @@ func DetectGGMLType(b []byte) string {
}
}
func
DecodeGGML
(
rs
io
.
ReadSeeker
)
(
*
GGML
,
int64
,
error
)
{
func
DecodeGGML
(
rs
io
.
ReadSeeker
)
(
*
GGML
,
int64
,
error
)
{
var
magic
uint32
var
magic
[
4
]
byte
if
err
:=
binary
.
Read
(
rs
,
binary
.
LittleEndian
,
&
magic
);
err
!=
nil
{
if
err
:=
binary
.
Read
(
rs
,
binary
.
LittleEndian
,
&
magic
);
err
!=
nil
{
return
nil
,
0
,
err
return
nil
,
0
,
err
}
}
var
c
container
var
c
container
switch
magic
{
switch
binary
.
LittleEndian
.
Uint32
(
magic
[
:
])
{
case
FILE_MAGIC_GGML
,
FILE_MAGIC_GGMF
,
FILE_MAGIC_GGJT
:
case
FILE_MAGIC_GGML
,
FILE_MAGIC_GGMF
,
FILE_MAGIC_GGJT
:
return
nil
,
0
,
ErrUnsupportedFormat
return
nil
,
0
,
ErrUnsupportedFormat
case
FILE_MAGIC_GGLA
:
case
FILE_MAGIC_GGLA
:
c
=
&
containerGGLA
{}
c
=
&
containerGGLA
{}
case
FILE_MAGIC_GGUF
_LE
:
case
FILE_MAGIC_GGUF
:
c
=
&
containerGGUF
{
ByteOrder
:
binary
.
LittleEndian
}
c
=
&
containerGGUF
{
ByteOrder
:
binary
.
LittleEndian
}
case
FILE_MAGIC_GGUF_BE
:
c
=
&
containerGGUF
{
ByteOrder
:
binary
.
BigEndian
}
default
:
default
:
return
nil
,
0
,
errors
.
New
(
"invalid file magic"
)
return
nil
,
0
,
errors
.
New
(
"invalid file magic"
)
}
}
...
...
llm/gguf.go
View file @
f5f245cc
...
@@ -36,10 +36,23 @@ func (c *containerGGUF) Name() string {
...
@@ -36,10 +36,23 @@ func (c *containerGGUF) Name() string {
}
}
func
(
c
*
containerGGUF
)
Decode
(
rs
io
.
ReadSeeker
)
(
model
,
error
)
{
func
(
c
*
containerGGUF
)
Decode
(
rs
io
.
ReadSeeker
)
(
model
,
error
)
{
if
err
:=
binary
.
Read
(
rs
,
c
.
ByteOrder
,
&
c
.
Version
);
err
!=
nil
{
var
version
[
4
]
byte
if
err
:=
binary
.
Read
(
rs
,
c
.
ByteOrder
,
&
version
);
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
// if the lower 16 bits are 0, the byte order is probably wrong
if
c
.
ByteOrder
.
Uint32
(
version
[
:
])
&
1
<<
4
==
0
{
switch
c
.
ByteOrder
{
case
binary
.
LittleEndian
:
c
.
ByteOrder
=
binary
.
BigEndian
case
binary
.
BigEndian
:
c
.
ByteOrder
=
binary
.
LittleEndian
}
}
c
.
Version
=
c
.
ByteOrder
.
Uint32
(
version
[
:
])
var
err
error
var
err
error
switch
c
.
Version
{
switch
c
.
Version
{
case
1
:
case
1
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment