6
6
"fmt"
7
7
"os"
8
8
"path/filepath"
9
+ "slices"
9
10
"strings"
10
11
"time"
11
12
@@ -22,8 +23,11 @@ var Aliases map[string]string = map[string]string{
22
23
}
23
24
24
25
const (
25
- LlamaGGML = "llama-ggml"
26
- LLamaCPP = "llama-cpp"
26
+ LlamaGGML = "llama-ggml"
27
+ LLamaCPP = "llama-cpp"
28
+
29
+ LLamaCPPFallback = "llama-cpp-fallback"
30
+
27
31
Gpt4AllLlamaBackend = "gpt4all-llama"
28
32
Gpt4AllMptBackend = "gpt4all-mpt"
29
33
Gpt4AllJBackend = "gpt4all-j"
@@ -62,6 +66,45 @@ ENTRY:
62
66
backends = append (backends , e .Name ())
63
67
}
64
68
}
69
+
70
+ // order backends from the asset directory.
71
+ // as we scan for backends, we want to keep some order which backends are tried of.
72
+ // for example, llama.cpp should be tried first, and we want to keep the huggingface backend at the last.
73
+
74
+ // sets a priority list
75
+ // First has more priority
76
+ priorityList := []string {
77
+ // First llama.cpp and llama-ggml
78
+ LLamaCPP , LLamaCPPFallback , LlamaGGML , Gpt4All ,
79
+ }
80
+ toTheEnd := []string {
81
+ // last has to be huggingface
82
+ LCHuggingFaceBackend ,
83
+ // then bert embeddings
84
+ BertEmbeddingsBackend ,
85
+ }
86
+ slices .Reverse (priorityList )
87
+ slices .Reverse (toTheEnd )
88
+
89
+ // order certain backends first
90
+ for _ , b := range priorityList {
91
+ for i , be := range backends {
92
+ if be == b {
93
+ backends = append ([]string {be }, append (backends [:i ], backends [i + 1 :]... )... )
94
+ break
95
+ }
96
+ }
97
+ }
98
+ // make sure that some others are pushed at the end
99
+ for _ , b := range toTheEnd {
100
+ for i , be := range backends {
101
+ if be == b {
102
+ backends = append (append (backends [:i ], backends [i + 1 :]... ), be )
103
+ break
104
+ }
105
+ }
106
+ }
107
+
65
108
return backends , nil
66
109
}
67
110
0 commit comments