Skip to content

Commit 647fc7d

Browse files
committed
feat(conf): remove -GGUF in model name and merge conflicts
1 parent 87e7e9e commit 647fc7d

1 file changed

Lines changed: 80 additions & 28 deletions

File tree

conf/write.go

Lines changed: 80 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"math"
1313
"os"
1414
"path/filepath"
15+
"reflect"
1516
"strings"
1617

1718
"github.com/LM4eu/goinfer/gie"
@@ -228,54 +229,105 @@ func (cfg *Cfg) setSwapModels() {
228229
}
229230

230231
for model, flags := range cfg.ExtraModels {
232+
gi := true
233+
mc := commonMC
231234
switch {
232235
case flags == "":
233-
cfg.addModelCfg(model, "${cmd-common} -hf "+model, commonMC)
234-
cfg.addModelCfg(A_+model, "${cmd-goinfer} -hf "+model, goinferMC)
236+
flags = "-hf " + model
235237
case strings.HasPrefix(flags, "--embd-"):
236-
cfg.addModelCfg(model, "${cmd-common} "+flags, commonMC)
238+
gi = false
237239
case strings.HasPrefix(flags, "--fim-"):
238-
cfg.addModelCfg(model, "${cmd-common} "+flags, fimMC)
239-
case strings.Contains(flags, "-m "), strings.Contains(flags, "-hf "):
240-
cfg.addModelCfg(model, "${cmd-common} "+flags, commonMC)
241-
cfg.addModelCfg(A_+model, "${cmd-goinfer} "+flags, goinferMC)
240+
mc = fimMC
241+
gi = false
242242
default:
243-
cfg.addModelCfg(model, "${cmd-common} -hf "+model+" "+flags, commonMC)
244-
cfg.addModelCfg(A_+model, "${cmd-goinfer} -hf "+model+" "+flags, goinferMC)
243+
}
244+
cfg.addModelCfg(model, "${cmd-common}", flags, mc)
245+
if gi {
246+
goinferMC.UseModelName = model // overrides the model name that is sent to /upstream server
247+
cfg.addModelCfg(A_+model, "${cmd-goinfer}", flags, goinferMC)
245248
}
246249
}
247250

248251
// For each model, set two model settings:
249252
// 1. for the OpenAI endpoints
250253
// 2. for the /completion endpoint (prefix with A_ and hide the model)
251-
for name, mi := range info {
252-
goinferMC.UseModelName = name // overrides the model name that is sent to /upstream server
253-
args := " " + mi.Flags + " -m " + mi.Path
254-
cfg.addModelCfg(name, "${cmd-common}"+args, commonMC) // API for Cline, RooCode, RolePlay...
255-
cfg.addModelCfg(A_+name, "${cmd-goinfer}"+args, goinferMC) // API for Agent-Smith...
254+
for model, mi := range info {
255+
goinferMC.UseModelName = model // overrides the model name that is sent to /upstream server
256+
flags := mi.Flags + " -m " + mi.Path
257+
cfg.addModelCfg(model, "${cmd-common}", flags, commonMC) // API for Cline, RooCode, RolePlay...
258+
cfg.addModelCfg(A_+model, "${cmd-goinfer}", flags, goinferMC) // API for Agent-Smith...
256259
}
257260
}
258261

259262
// Add the model settings within the llama-swap configuration.
260-
func (cfg *Cfg) addModelCfg(modelName, cmd string, mc *config.ModelConfig) {
261-
mCfg := *mc // copy
262-
mCfg.Cmd = cmd
263-
264-
mCfg.CheckEndpoint = "/health"
265-
if strings.Contains(cmd, " -hf ") {
266-
// -hf may download a model for a while
267-
// but /health check will stop it,
268-
// so better to disable /health check
269-
mCfg.CheckEndpoint = "none"
263+
func (cfg *Cfg) addModelCfg(model, cmd, flags string, mc *config.ModelConfig) {
264+
nMC := *mc // copy
265+
266+
nMC.CheckEndpoint = "/health"
267+
nMC.Cmd = cmd
268+
if flags != "" {
269+
nMC.Cmd += " " + flags
270+
if strings.Contains(flags, " -hf ") {
271+
// -hf may download a model for a while
272+
// but /health check will stop it,
273+
// so better to disable /health check
274+
nMC.CheckEndpoint = "none"
275+
}
270276
}
271277

272-
old, ok := cfg.Swap.Models[modelName]
278+
model = strings.Replace(model, "-GGUF", "", 1)
279+
old, ok := cfg.Swap.Models[model]
273280
if ok {
274-
slog.Debug("Overwrite config", "old", old)
275-
slog.Debug("Overwrite config", "new", modelName)
281+
merge(&old, &nMC, flags)
282+
}
283+
cfg.Swap.Models[model] = nMC
284+
}
285+
286+
// Add the model settings within the llama-swap configuration.
287+
func merge(old, mc *config.ModelConfig, newFlags string) {
288+
if reflect.DeepEqual(old.Cmd, mc.Cmd) {
289+
return // same values
290+
}
291+
292+
if old.Cmd == mc.Cmd {
293+
slog.Debug("Overwrite but same", "cmd", old.Cmd)
294+
return
295+
}
296+
297+
if newFlags == "" {
298+
slog.Debug("Empty flags => Skip new, keep", "old", old.Cmd)
299+
*mc = *old
300+
return
301+
}
302+
303+
oH := strings.Contains(old.Cmd, " -hf ")
304+
nH := strings.Contains(newFlags, "-hf ")
305+
oM := strings.Contains(old.Cmd, " -m ")
306+
nM := strings.Contains(newFlags, "-m ")
307+
308+
if oH && oM {
309+
slog.Warn("Overwrite. Cannot use both -hf and -m", "cmd", old.Cmd)
310+
return
311+
}
312+
if nH && nM {
313+
slog.Warn("Overwrite. Cannot use both -hf and -m", "flags", newFlags)
314+
*mc = *old
315+
return
316+
}
317+
if oH && nM {
318+
slog.Debug("Skip -hf (old) to use -m (new)", "old", old.Cmd, "new", mc.Cmd)
319+
return
320+
}
321+
if nH && oM {
322+
slog.Debug("Skip -hf (new) to use -m (old)", "old", old.Cmd, "new", mc.Cmd)
323+
*mc = *old
324+
return
276325
}
277326

278-
cfg.Swap.Models[modelName] = mCfg
327+
slog.Info("Merge", "old", old.Cmd)
328+
slog.Info("Merge", "new", mc.Cmd)
329+
mc.Cmd = old.Cmd + " " + newFlags
330+
slog.Info("Merge", "both", mc.Cmd)
279331
}
280332

281333
func (cfg *Cfg) setAPIKey(debug, noAPIKey bool) {

0 commit comments

Comments
 (0)