|
@@ -66,7 +66,21 @@ func (m *Model) Has(caps ...Capability) bool {
|
|
for _, cap := range caps {
|
|
for _, cap := range caps {
|
|
switch cap {
|
|
switch cap {
|
|
case CapabilityCompletion:
|
|
case CapabilityCompletion:
|
|
- if slices.Contains(m.Config.ModelFamilies, "bert") || slices.Contains(m.Config.ModelFamilies, "nomic-bert") {
|
|
|
|
|
|
+ f, err := os.Open(m.ModelPath)
|
|
|
|
+ if err != nil {
|
|
|
|
+ slog.Error("couldn't open model file", "error", err)
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ defer f.Close()
|
|
|
|
+
|
|
|
|
+ // TODO(mxyng): decode the GGML into model to avoid doing this multiple times
|
|
|
|
+ ggml, _, err := llm.DecodeGGML(f, 0)
|
|
|
|
+ if err != nil {
|
|
|
|
+ slog.Error("couldn't decode ggml", "error", err)
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if _, ok := ggml.KV()[fmt.Sprintf("%s.pooling_type", ggml.KV().Architecture())]; ok {
|
|
return false
|
|
return false
|
|
}
|
|
}
|
|
default:
|
|
default:
|