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
984c9c62
Commit
984c9c62
authored
Aug 09, 2023
by
Bruce MacDonald
Browse files
fix embeddings invalid values
parent
9738ef85
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
9 additions
and
39 deletions
+9
-39
llama/llama.go
llama/llama.go
+7
-15
server/images.go
server/images.go
+2
-24
No files found.
llama/llama.go
View file @
984c9c62
...
...
@@ -94,7 +94,6 @@ import (
"io"
"log"
"os"
"reflect"
"strings"
"sync"
"unicode/utf8"
...
...
@@ -421,27 +420,20 @@ func (llm *LLM) Embedding(input string) ([]float64, error) {
return
nil
,
errors
.
New
(
"llama: tokenize embedding"
)
}
retval
:=
C
.
llama_eval
(
llm
.
ctx
,
unsafe
.
SliceData
(
tokens
),
C
.
int
(
len
(
tokens
)),
C
.
llama_get_kv_cache_token_count
(
llm
.
ctx
)
,
C
.
int
(
llm
.
NumThread
))
retval
:=
C
.
llama_eval
(
llm
.
ctx
,
unsafe
.
SliceData
(
tokens
),
C
.
int
(
len
(
tokens
)),
0
,
C
.
int
(
llm
.
NumThread
))
if
retval
!=
0
{
return
nil
,
errors
.
New
(
"llama: eval"
)
}
n
:=
int
(
C
.
llama_n_embd
(
llm
.
ctx
)
)
n
:=
C
.
llama_n_embd
(
llm
.
ctx
)
if
n
<=
0
{
return
nil
,
errors
.
New
(
"llama: no embeddings generated"
)
}
cEmbeddings
:=
unsafe
.
Slice
(
C
.
llama_get_embeddings
(
llm
.
ctx
),
n
)
embed
Ptr
:=
C
.
llama_get_e
mbeddings
(
llm
.
ctx
)
if
embedPtr
==
nil
{
return
nil
,
errors
.
New
(
"llama: embedding retrieval failed"
)
embed
dings
:=
make
([]
float64
,
len
(
cE
mbeddings
)
)
for
i
,
v
:=
range
cEmbeddings
{
embeddings
[
i
]
=
float64
(
v
)
}
header
:=
reflect
.
SliceHeader
{
Data
:
uintptr
(
unsafe
.
Pointer
(
embedPtr
)),
Len
:
n
,
Cap
:
n
,
}
embedSlice
:=
*
(
*
[]
float64
)(
unsafe
.
Pointer
(
&
header
))
return
embedSlice
,
nil
return
embeddings
,
nil
}
server/images.go
View file @
984c9c62
...
...
@@ -11,7 +11,6 @@ import (
"html/template"
"io"
"log"
"math"
"net/http"
"os"
"path/filepath"
...
...
@@ -480,31 +479,10 @@ func embeddingLayers(e EmbeddingParams) ([]*LayerReader, error) {
Total
:
len
(
data
)
-
1
,
Completed
:
i
,
})
retry
:=
0
generate
:
if
retry
>
3
{
log
.
Printf
(
"failed to generate embedding for '%s' line %d: %v"
,
filePath
,
i
+
1
,
err
)
continue
}
embed
,
err
:=
llm
.
Embedding
(
d
)
if
err
!=
nil
{
log
.
Printf
(
"retrying embedding generation for '%s' line %d: %v"
,
filePath
,
i
+
1
,
err
)
retry
++
goto
generate
}
// Check for NaN and Inf in the embedding, which can't be stored
for
_
,
value
:=
range
embed
{
if
math
.
IsNaN
(
value
)
||
math
.
IsInf
(
value
,
0
)
{
log
.
Printf
(
"reloading model, embedding contains NaN or Inf"
)
// reload the model to get a new embedding, the seed can effect these outputs and reloading changes it
llm
.
Close
()
llm
,
err
=
llama
.
New
(
e
.
model
,
e
.
opts
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"load model to generate embeddings: %v"
,
err
)
}
retry
++
goto
generate
}
log
.
Printf
(
"failed to generate embedding for '%s' line %d: %v"
,
filePath
,
i
+
1
,
err
)
continue
}
embeddings
=
append
(
embeddings
,
vector
.
Embedding
{
Data
:
d
,
Vector
:
embed
})
}
...
...
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